zoj 3725 - Painting Storages(动归)
题目要求找到至少存在m个连续被染成红色的情况,相对应的,我们求至多有m-1个连续的被染成红色的情况数目,然后用总的数目将其减去是更容易的做法。
用dp来找满足条件的情况数目,,
状态:dp[i][0]和dp[i][1]分别表示第i个柱子被染成红色和蓝色的情况数目。
状态转移:dp[i][0] = dp[i-1][0]+dp[i][1]-dp[i-m][1];
dp[i][1] = dp[i-1][0]+dp[i][1];
代码如下:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map> #define LL long long
#define eps 1e-8
#define M 100005
#define mod 1000000007 using namespace std; int n, m;
LL d[M][2];
LL _pow(int x)
{
if(x==0) return 1;
LL ans = _pow(x/2);
if(x&1) return ans*ans*2%mod;
return ans*ans%mod;
}
LL dp()
{
d[0][1] = 1;
d[0][0] = 0;
for(int i = 1; i <= n; ++i)
{
d[i][1] = (d[i-1][1]+d[i-1][0])%mod;
if(i<m)
d[i][0] = (d[i-1][1]+d[i-1][0])%mod;
else
d[i][0] = (d[i-1][1]+d[i-1][0]-d[i-m][1])%mod;
}
return (d[n][1]+d[n][0])%mod;
}
int main ()
{
while(~scanf("%d%d", &n, &m))
{
printf("%lld\n", (_pow(n)-dp()+mod)%mod);
}
return 0;
}
zoj 3725 - Painting Storages(动归)的更多相关文章
- [ACM] ZOJ 3725 Painting Storages (DP计数+组合)
Painting Storages Time Limit: 2 Seconds Memory Limit: 65536 KB There is a straight highway with ...
- ZOJ - 3725 Painting Storages
Description There is a straight highway with N storages alongside it labeled by 1,2,3,...,N. Bob ask ...
- ZOJ 3725 Painting Storages(DP+排列组合)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5048 Sample Input 4 3 Sample Output ...
- Painting Storages(ZOJ)
There is a straight highway with N storages alongside it labeled by 1,2,3,...,N. Bob asks you to pai ...
- zoj 3725
题意: n个格子排成一条直线,可以选择涂成红色或蓝色,问最少 m 个连续为红色的方案数. 解题思路: 应该是这次 ZOJ 月赛最水的一题,可惜还是没想到... dp[i] 表示前 i 个最少 m 个连 ...
- ZOJ-3725 Painting Storages DP
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3725 n个点排列,给每个点着色,求其中至少有m个红色的点连续的数 ...
- ZOJ-3725 Painting Storages 动态规划
题意:给定一个数N,表示有N个位置,要么放置0,要么放置1,问至少存在一个连续的M个1的放置方式有多少? 分析:正面求解可能还要考虑到重复计算带来的影响,该题适应反面求解.设dp[i][j]表示到前 ...
- 130804组队练习赛ZOJ校赛
A.Ribbon Gymnastics 题目要求四个点作圆,且圆与圆之间不能相交的半径之和的最大值.我当时想法很简单,只要两圆相切,它们的半径之和一定最大,但是要保证不能相交的话就只能取两两个点间距离 ...
- zoj 1610 Count the Colors
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=610 Count the Colors Time Limit:2000MS ...
随机推荐
- java获取classpath
public class PathTest { public static void main(String[] args) { //获取根路径三种方式 System.out.println(Path ...
- JavaScript的继承
原型继承的实现 1 简化版本 function SuperClass(){...} function SubClass(){...} SubClass.prototype=new SuperClass ...
- WinForm 使用 HttpUtility
在 Visual C# 中使用 HttpUtility 是无效的,即使添加了命名空间 System.Web,是因为需要在引用中添加 System.Web.dll. 可是没有 System.Web.dl ...
- 用OMT方法建立其分析模型: 本大学基于网络的课程注册系统。
OMT方法是用3种模型来描述软件系统,分别是对象模型,动态模型,功能模型. 1)对象模型:课程网络注册系统 2)动态模型:序列图 3)功能模型:数据流图 0层DFD图 1层DFD图
- IOS中无缓存的图片载入
在IOS中,我们常用[UIImage imageNamed]方法获取图像,这种方法简便,容易理解.但是有个缺点,就是有缓存.这种方式 传人的图像的就是通过文件名方式文件名.如果,我们内存有限,我们就必 ...
- [game]十字链表的AOI算法实现
AOI主要有九宫格.灯塔和十字链表的算法实现.本文阐述十字链表的实现和尝试. 1. 基本原理 根据二维地图,将其分成x轴和y轴两个链表.如果是三维地图,则还需要维护多一个z轴的链表.将对象的坐标值按照 ...
- Groovy 模版引擎
1. Introduction Groovy supports multiple ways to generate text dynamically including GStrings, print ...
- struts2一些概念介绍和标签的使用
依赖注入 模块包含 struts.xml的模块包含格式 <include file="xx.xml" > OGNL 对象导航语言 有个超大的好处就是根据对象访问属性 ...
- 【转】 71道经典Android面试题和答案,重要知识点都包含了
,,面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 ...
- github基本操作
http://www.cnblogs.com/SeeYouBug/p/6193527.html#3583637