Painting Storages


Time Limit: 2 Seconds      Memory Limit: 65536 KB


There is a straight highway with N storages alongside it labeled by 1,2,3,...,N. Bob asks you to paint all storages with two colors: red and blue. Each storage will
be painted with exactly one color.

Bob has a requirement: there are at least M continuous storages (e.g. "2,3,4" are 3 continuous storages) to be painted with red. How many ways can you paint all storages under
Bob's requirement?

Input

There are multiple test cases.

Each test case consists a single line with two integers: N and M (0<N, M<=100,000).

Process to the end of input.

Output

One line for each case. Output the number of ways module 1000000007.

Sample Input

4 3

Sample Output

3

Author: ZHAO, Kui

Contest: ZOJ Monthly, June 2013

解题思路:

这道题和省赛上的一道非常像啊。

假设曾经做过,省赛的时候也不会没思路。

。。

这道题单纯用组合是不行的。。。

题意为:用红蓝两种颜色给N个仓库(标号1—N)涂色。要求至少有M个连续的仓库涂成红色,问一共能够的涂色方案。

结果模1000000007

dp[i] 为 前i个仓库满足至少M个连续仓库为红色的方法数。

那么dp[M]肯定为1。 dp[0,1,2,3,......M-1] 均为0.

在求dp[i]的时候,有两种情况

一。前i-1个仓库涂色已经符合题意,那么第i个仓库涂什么颜色都能够,有 dp[i] = 2*dp[i-1] ;(有可能超出范围,别忘了mod)

二。加上第i个仓库涂为红色才构成M个连续仓库为红色。那么 区间 [i-m+1, i]。为红色,第i-m个仓库肯定是蓝色并且从1到i-m-1个仓库肯定是不符合题意的涂色。所以用1到i-m-1的仓库的全部涂色方法 2^(i-m-1) 减去符合题意的方法数dp[i-m-1] 。所以方法数为2^(i-m-1)
- dp[i-m-1]

代码:

#include <iostream>
#include <string.h>
using namespace std;
const int mod=1000000007;
const int maxn=100005;
int power[maxn+1];
int dp[maxn];//前i个仓库满足m个仓库为红色的方法数
int n,m; void getPower()//预处理出2的多少次方
{
power[0]=1;
for(int i=1;i<=maxn;i++)
power[i]=power[i-1]*2%mod;
} int main()
{
getPower();
while(cin>>n>>m)
{
memset(dp,0,sizeof(dp));
dp[m]=1;
for(int i=m+1;i<=n;i++)
dp[i]=(dp[i-1]*2%mod+power[i-m-1]-dp[i-m-1])%mod;
cout<<dp[n]<<endl;
}
return 0;
}

[ACM] ZOJ 3725 Painting Storages (DP计数+组合)的更多相关文章

  1. ZOJ 3725 Painting Storages(DP+排列组合)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5048 Sample Input 4 3 Sample Output ...

  2. ZOJ - 3725 Painting Storages

    Description There is a straight highway with N storages alongside it labeled by 1,2,3,...,N. Bob ask ...

  3. zoj 3725 - Painting Storages(动归)

    题目要求找到至少存在m个连续被染成红色的情况,相对应的,我们求至多有m-1个连续的被染成红色的情况数目,然后用总的数目将其减去是更容易的做法. 用dp来找满足条件的情况数目,, 状态:dp[i][0] ...

  4. ZOJ-3725 Painting Storages DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3725 n个点排列,给每个点着色,求其中至少有m个红色的点连续的数 ...

  5. 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas

    [题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...

  6. 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值

    [题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...

  7. 动态规划(DP计数):HDU 5116 Everlasting L

    Matt loves letter L.A point set P is (a, b)-L if and only if there exists x, y satisfying:P = {(x, y ...

  8. 【POJ1952】逢低吸纳 dp+计数

    题目大意:给定一个有 N 个数的序列,求其最长下降子序列的长度,并求出有多少种不同的最长下降子序列.(子序列各项数值相同视为同一种) update at 2019.4.3 题解:求最长下降子序列本身并 ...

  9. Tetrahedron(Codeforces Round #113 (Div. 2) + 打表找规律 + dp计数)

    题目链接: https://codeforces.com/contest/166/problem/E 题目: 题意: 给你一个三菱锥,初始时你在D点,然后你每次可以往相邻的顶点移动,问你第n步回到D点 ...

随机推荐

  1. 【php】运算符优先级界定

    <?php $i = 1; $array[$i] = $i++; print_r($array);die; //输出 Array([2] => 1) $a = 1; echo $a + $ ...

  2. 零基础学Python不迷茫——基本学习路线及教程!

    什么是Python? 在过去的2018年里,Python成功的证明了它自己有多火,它那“简洁”与明了的语言成功的吸引了大批程序员与大数据应用这的注意,的确,它的实用性的确是配的上它的热度.   Pyt ...

  3. u-boot顶层目录config.mk分析

    1. 设置obj与src ifneq ($(OBJTREE),$(SRCTREE)) ifeq ($(CURDIR),$(SRCTREE)) dir := else dir := $(subst $( ...

  4. Django之ORM操作(重要)

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条   <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给 ...

  5. Spring注解@Component、@Repository、@Service、@Controller

    @Service用于标注业务层组件 @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即DAO组件 @Component泛指组件, ...

  6. performSelectorOnMainThread

    在多线程操作中,有一个著名的错误,叫做"Tried to obtain the web lock from a thread other than the main thread or th ...

  7. PHP 判断表单提交的file是否为空

    echo '<pre>'; var_dump($product_attach_files); echo "</pre>"; echo ];

  8. hiho week 143

    P1 : hiho密码 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description 小Ho根据最近在密码学课上学习 ...

  9. 牛客网Wannafly模拟赛

    A矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行 ...

  10. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...