题意:

n个格子排成一条直线,可以选择涂成红色或蓝色,问最少 m 个连续为红色的方案数。

解题思路:

应该是这次 ZOJ 月赛最水的一题,可惜还是没想到。。。

dp[i] 表示前 i 个最少 m 个连续为红色的方案数。

转移时,分类讨论:

1、前 i-1 个已经满足这个性质,那么,第 i 个随意涂色,方案数为 dp[i-1] * 2 。

2、前 i-1 个不满足这个性质,那么,要想成为方案,区间 [i-m+1,i] 必须涂成红色。并且,下标为 i-m 这个点必须是蓝色,否则就与 情况1 重复了。

而且正是由于这一点,只要剩下的区间 [1,i-m-1] 不满足这个性质,就能保证整个区间 [1,i-1] 不满足这个性质。方案数为 2^(i-m-1) - dp[i-m-1]。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1e5 + 5;
  6. const int mod = 1e9 + 7;
  7. int dp[N],pow[N]={1};
  8. int main()
  9. {
  10. int n,m;
  11. for(int i=1;i<N;i++)
  12. pow[i] = pow[i-1] * 2 % mod;
  13. while(~scanf("%d%d",&n,&m))
  14. {
  15. memset(dp,0,sizeof(int)*m);
  16. dp[m] = 1;
  17. for(int i=m+1;i<=n;i++)
  18. dp[i] = ((dp[i-1] * 2 % mod + pow[i-m-1] - dp[i-m-1]) % mod + mod) % mod;
  19. printf("%d\n",dp[n]);
  20. }
  21. return 0;
  22. }

最新文章

  1. Hadoop_UDTF示例
  2. 只需一点小修改,HTC Vive画面会更清晰锐利
  3. Installing MySQL Server on CentOS
  4. chrome修改UserAgent,调试
  5. 复习IOS多线程知识
  6. Swift--基础(二)元组 断言 错误处理
  7. Selector、shape详解,注意这两种图像资源都以XML方式存放在drawable不带分辨率的文件夹中
  8. [K/3Cloud] 如何从被调用的动态表单界面返回数据
  9. angular.js之路由的选择
  10. HCTF
  11. C语言的字符串操作函数小结
  12. JS string 常用方法总结
  13. 【python小练】0012题
  14. Redis主从哨兵和集群搭建
  15. 给学习Linux系统小白的两三个建议
  16. django从请求到响应的过程深入讲解
  17. Spring框架的事务管理相关的类和API
  18. IntelliJ IDEA 2017版 快捷键CTRL + SHIFT + A无效如何调试(详细的开启idea自动make功能 )
  19. PHP输出javascript,alert中文乱码解决办法
  20. Datatable paging,Repeater with Paging

热门文章

  1. AIDL进程间调用与Binder的简单介绍
  2. Android之图片窗口和大小调节
  3. SVN Application
  4. 【转】 SqlServer性能检测和优化工具使用详细
  5. C#事件解析
  6. 关于HTML与CSS编写规范
  7. bzoj3315:[Usaco2013 Nov]Pogo-Cow
  8. 考虑virtual函数以外的其它选择
  9. [java学习笔记]java语言基础概述之运算符&amp;程序流程控制&amp;for循环嵌套
  10. TCP/IP协议简单介绍