【codevs】5833 放置核弹

第一次发 DP or 递推,如果有什么 理解错误 or 理解不透彻 or 有更优解法,嗯,请神犇指出(毕竟我 DP or 递推 很弱)...

题目:

网址:http://codevs.cn/problem/5833/

大意:n个坑里不能有连续的m个核弹,求方案数

嗯,其实也不难,看到题目第一个想到的就是dfs...

结果数据范围...

...

好吧,dfs TLE...

嗯,记忆化...

嗯,我不会...

那么,好吧,想一下DP or 递推...

思路:

把n个坑分成两部分

第一部分是0(没有放,因为没有放也算一种)~m-1,在这个范围内,由于不超过m,因此都可以弄一次放和不放(也就是这里面随便放都可以),那么就得到一个公式——f[b]=(f[b-1]+f[b-2]+...+f[0])*2

第二部分是m~n,在这个范围内,因为超过m,所以要考虑一下连续m个坑不能都放核弹的情况,于是b-m之前的不能算在一起了,也只能有放和不放其中一种情况,因此又有一个公式——f[b]=f[b-1]+f[b-2]+...+f[b-m]

这样算下去,f[n]就是答案了...

写的我自己都有点乱,可能理解有误...

嗯,就是这样...

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int main(){
 5     int f[10000]={0},b,n,m,b1,sum=1;
 6     cin>>n>>m;
 7     for(b=0;b<m;b++)f[b]=sum%1000000007,sum=(f[b]+sum)%1000000007;//从0(没有)~m-1 都能放或不放核弹的情况 f[b]=(f[b-1]+f[b-2]+...f[0])*2
 8     for(b=m;b<=n;b++)
 9        for(b1=1;b1<=m;b1++)
10            f[b]=(f[b]+f[b-b1])%1000000007;//从m开始 每m个连续的坑里,不一定能放核弹的情况 f[b]=f[b-1]+f[b-2]+...f[b-m]
11     cout<<f[n]<<endl;
12 }

放置核弹

嗯,又是一篇博客...

为什么总是写 DP or 递推?因为我到现在都分不清DP和递推...

时间: 2024-09-30 19:54:00

【codevs】5833 放置核弹的相关文章

Codevs 1257 打砖块

1257 打砖块 http://codevs.cn/problem/1257/ 题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[i,j](a[i,j]<=50).下面是一个有5层砖块的例子.如果你要敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它,若i>1,则你必须先敲掉第i-1层的第j和第j+1块砖. 你的任务是从一个有n(n<=5

[ CodeVS冲杯之路 ] P2492

不充钱,你怎么AC? 题目:http://codevs.cn/problem/2492/ 在此先orz小胖子,教我怎么路径压缩链表,那么这样就可以在任意节点跳进链表啦(手动@LCF) 对于查询操作,直接树状数组(以下简称BIT)维护,修改操作就一个个暴力开方搞,再用差值单点更新BIT 不过这样会TLE,要加一点优化对不对,正如开头所说的路径压缩链表 路径压缩链表其实就是个并查集,在普通的链表里,删去两个连续的节点后会是下面这种情况,如删去2,3 当访问 2 的时候,会跳到3,但 3 已经删除了,

[CODEVS 1281] Xn数列

描述 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn http://codevs.cn/problem/1281/ 分析 比较裸的矩阵乘法题, 好久没做了, 写写思路 假设矩阵 A = { {a1, a2}, {a3, a4} }, B = { {b1, b2}, {b3, b4} }. 根据矩阵乘法的计算方法, 有 : A×B = { {a1b1+a2b2, a1b2+a2b4}, {a3b1+a4b3, a3b2+a4b4} }. 那

codevs:1249 多边形的面积(多边形面积计算模板)

题目描述 Description 给出一个简单多边形(没有缺口),它的边要么是垂直的,要么是水平的.要求计算多边形的面积. 多边形被放置在一个X-Y的卡笛尔平面上,它所有的边都平行于两条坐标轴之一.然后按逆时针方向给出各顶点的坐标值.所有的坐标值都是整数(因此多边形的面积也为整数). 输入描述 Input Description 输入文件第一行给出多边形的顶点数n(n≤100).接下来的几行每行给出多边形一个顶点的坐标值X和Y(都为整数并且用空格隔开).顶点按逆时针方向逐个给出.并且多边形的每一

codevs——T1219 骑士游历

 http://codevs.cn/problem/1219/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 设有一个n*m的棋盘(2≤n≤50,2≤m≤50),如下图,在棋盘上有一个中国象棋马. 规定: 1)马只能走日字 2)马只能向右跳 问给定起点x1,y1和终点x2,y2,求出马从x1,y1出发到x2,y2的合法路径条数. 输入描述 Input Description 第一行2个整数n和m 第二行4个

1683 车厢重组 codevs

http://codevs.cn/problem/1683/ 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序

codevs 1487 大批整数排序(水题日常)

时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序

codevs 3342 绿色通道 (二分+线性DP)

codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Passage, GP)是唐山一中常用的练习册之一,其题量之大深受lsz等许多oiers的痛恨,其中又以数学绿色通道为最.2007年某月某日,soon-if (数学课代表),又一次宣布收这本作业,而lsz还一点也没有写…… 高二数学<绿色通道>总共有n道题目要写(其实是抄),编号1..n,抄每道题所花时间

AC日记——楼房 codevs 2995

2995 楼房 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平线高度为0.在轮廓线长度最小的前提下,从左到右输出轮廓线. 输入描述 Input Description 第一行一个整数n,表示矩形个数 以下n行,每行3个整数h[i],l[i