hdu 1723 DP/递推
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式。
这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacci 所举的例子:一个人每次能够跨一或二阶台阶,问到 n 阶台阶有几种跨法。理念是一样的,只不过跨得台阶数可能会变而已。根据 Fibonacci 数列类比过来,每次最多能传 m 人,则 A [ i ] = A [ i - m ] + A [ i - m + 1 ] + …… + A [ i - 1 ] , 表示传到第 i 人的情况可能是传到前面 1 ~ m 人后经一步传来的,而前面项不足 m 的则都是由前面所有项累加得到的。
是的,思路并没有问题,但是我还是 WA 了好多发,于是我找了个 AC 代码把所有解的情况打表出来找不同,终于发现了当有超过一人,而最多可向后传 0 人时,即消息不能向后传的时候,是不可能传到最后的,值是 0 ,但是不能忽略如果一开始只有一人,那么他本身就是最后一人,即使 m = 0 ,即不能向后传消息了,这时队尾的人也就是他自己也还是知道这个消息的,所以值是 1 。
至此,我的递推就圆满 AC 了。但是这道题却的确还有 DP 的做法,即每当消息传到某个人的可能情况数增加时,那么这些情况下他同样可以再将消息一步传给他后面的第 1 ~ m 个人,这样,遍历到最前面的 m 个人时每次 dp 值 ++ ,代表从开始点一步到该点的情况,而后面的则只需要传递种类数就行。
递推代码:
#include<stdio.h>
#include<string.h> int a[],M,N; int sum(int x,int y){
int i,s=;
for(i=x;i<=y;i++){
s+=a[i];
}
return s;
} void fun(){
a[]=;
a[]=;
int i;
for(i=;i<=M;i++){
a[i]=sum(,i-);
}
for(i=M+;i<=N;i++){
a[i]=sum(i-M,i-);
}
return;
} int main(){
while(scanf("%d%d",&N,&M)!=EOF&&(N!=||M!=)){
if(M==){
if(N==)printf("1\n");
else printf("0\n");
}
else {
fun();
printf("%d\n",a[N]);
}
}
return ;
}
DP 代码:
#include<stdio.h>
#include<string.h> int a[],M,N; int main(){
while(scanf("%d%d",&N,&M)!=EOF&&(N!=||M!=)){
int i,j;
memset(a,,sizeof(a));
a[]=;
for(i=;i<=N;i++){
if(i-<=M){
a[i]++;
}
for(j=;j<=M&&i+j<=N;j++){
a[i+j]+=a[i];
}
}
printf("%d\n",a[N]);
}
return ;
}
hdu 1723 DP/递推的更多相关文章
- HDU 5366 dp 递推
The mook jong Accepts: 506 Submissions: 1281 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- hdu2089(数位DP 递推形式)
不要62 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2604 Queuing(dp递推)
昨晚搞的第二道矩阵快速幂,一开始我还想直接套个矩阵上去(原谅哥模板题做多了),后来看清楚题意后觉得有点像之前做的数位dp的水题,于是就用数位dp的方法去分析,推了好一会总算推出它的递推关系式了(还是菜 ...
- HDU 2154 跳舞毯 | DP | 递推 | 规律
Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准确地说是减肥. 小黑买来一块圆形的毯子,把它们分成三等分,分别标上A,B,C,称之为“跳舞毯”,他的运动方式是 ...
- HDU 3469 Catching the Thief (博弈 + DP递推)
Catching the Thief Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 2050 折线分割平面 dp递推 *
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- HDU 4747 Mex 递推/线段树
题目链接: acm.hdu.edu.cn/showproblem.php?pid=4747 Mex Time Limit: 15000/5000 MS (Java/Others)Memory Limi ...
- HDU5965 扫雷 —— dp递推
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题解: 1. 用a[]数组记录第二行的数字,用dp[]记录没一列放的地雷数.如果第一列的地雷数d ...
随机推荐
- Redis之哈希类型命令
Hash(哈希) Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿 ...
- Java选择结构和数组
Java选择结构和数组 一.Switch语句 二.if和switch区别 推荐使用if 三.函数 Java中的函数和方法是同一个词 四.数组 4.1.数组常见错误 五.内存机制 六.转换成十六进制 移 ...
- HTML提交方式post和get区别(实验)
HTML提交方式post和get区别(实验) 一.post和get区别 get提交,提交的信息都显示在地址栏中. post提交,提交的信息不显示地址栏中,显示在消息体中. 二.客户端代码 <!D ...
- English trip -- VC(情景课)5 B Places around town 城市设施
Vocabulary focus 核心词汇 drugstore 药店: pill n. 药丸:弹丸,子弹:口服避孕药 medicine n. 药:医学:内科:巫术 hos ...
- Vue.js教程--基础(实例 模版语法template computed, watch v-if, v-show v-for, 一个组件的v-for.)
官网:https://cn.vuejs.org/v2/guide/index.html Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统. 视频教程:https: ...
- JavaScript 和 React,React用了大量语法糖,让JS编写更方便。
https://reactjs.org/docs/higher-order-components.htmlhttps://codepen.io/gaearon/pen/WooRWa?editors=0 ...
- oracle使用(1)
纯粹是记录工作中使用的分析函数或是语法点,不做其他用处. (1) with as 先举个例子吧: 有两张表,分别为A.B,求得一个字段的值先在表A中寻找,如果A表中存在数据,则输出A表的值:如果A表中 ...
- codeforces 559b//Equivalent Strings// Codeforces Round #313(Div. 1)
题意:定义了字符串的相等,问两串是否相等. 卡了时间,空间,不能新建字符串,否则会卡. #pragma comment(linker,"/STACK:1024000000,102400000 ...
- [HEOI2012]采花
第一眼以为是树套树qwq 然而n,m<=1e6 记上一个与i颜色相同的位置为nxt[i] 考虑i和nxt[i]会对那些询问产生贡献. 发现当右端点R>=i时, 左端点只要满足nxt[nxt ...
- HDU-1232 畅通工程 (并查集、判断图中树的棵数)
Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相 ...