题意:有一队人(人数 ≥ 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 值 ++ ,代表从开始点一步到该点的情况,而后面的则只需要传递种类数就行。

递推代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3
 4 int a[31],M,N;
 5
 6 int sum(int x,int y){
 7     int i,s=0;
 8     for(i=x;i<=y;i++){
 9         s+=a[i];
10     }
11     return s;
12 }
13
14 void fun(){
15     a[1]=1;
16     a[2]=1;
17     int i;
18     for(i=3;i<=M;i++){
19         a[i]=sum(1,i-1);
20     }
21     for(i=M+1;i<=N;i++){
22         a[i]=sum(i-M,i-1);
23     }
24     return;
25 }
26
27 int main(){
28     while(scanf("%d%d",&N,&M)!=EOF&&(N!=0||M!=0)){
29         if(M==0){
30             if(N==1)printf("1\n");
31             else printf("0\n");
32         }
33         else {
34             fun();
35             printf("%d\n",a[N]);
36         }
37     }
38     return 0;
39 }

View Code

DP 代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3
 4 int a[31],M,N;
 5
 6 int main(){
 7     while(scanf("%d%d",&N,&M)!=EOF&&(N!=0||M!=0)){
 8         int i,j;
 9         memset(a,0,sizeof(a));
10         a[1]=1;
11         for(i=2;i<=N;i++){
12             if(i-1<=M){
13                 a[i]++;
14             }
15             for(j=1;j<=M&&i+j<=N;j++){
16                 a[i+j]+=a[i];
17             }
18         }
19         printf("%d\n",a[N]);
20     }
21     return 0;
22 }

View Code

转载于:https://www.cnblogs.com/cenariusxz/p/4309578.html

hdu 1723 DP/递推相关推荐

  1. HDU 4489 (DP递推计数)

    DP 递推计数 题意: 这是一道比较神奇的题,很考验思维:有n个高低不同的人,现在需要进行排列,排列一定要满足两种方式 高低高··· 低高低··· 求出有多少排列方式. 思路: 我们的切入点是第i个人 ...

  2. Two Arrays(DP递推)

    You are given two integers nn and mm. Calculate the number of pairs of arrays (a,b)(a,b) such that: ...

  3. 动态规划入门之dp递推~

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 本篇文章重在递推,不 ...

  4. hdu 5273(递推)

    题目:给定多个询问,找到区间[l,r]的逆序数对数. 解题思路: 这道题目其实就是递推,只要找到递推公式即可.dp[i][j]表示在区间[i,j]内,逆序数的对数,则有递推式:dp[i][j] = d ...

  5. POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂

    哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种   递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列  ,可以放的方法一共有5种 1.放4个 1×2  则 为dp[n-2] ...

  6. BZOJ 3329: Xorequ(数位dp+递推)

    传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...

  7. Power oj2498/DP/递推

    power oj 2498 /递推 2498: 新年礼物 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submit: 12 Accepted: 3 ...

  8. HDU-5965 扫雷(dp / 递推)

    传送门 扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知 ...

  9. 2019.08.20【NOIP提高组】模拟 B 组 排序、DP+递推、矩阵乘法+数位DP/类欧

    文章目录 0 旅游(travel) 1 做梦(dream) 2 数数(count) 初见时,她说,"我无力自保,无处可去,无人可依." 多年后,他说,"我教你射箭,你已有 ...

最新文章

  1. 如何安装或卸载 Internet Explorer 9?
  2. lua如何判断是否支持cookie_如何判断家里暖气片是否需要更换
  3. setsockopt()函数使用详解
  4. HAN:基于双层注意力机制的异质图深度神经网络
  5. [MSSQL]COALESCE与ISNULL函数
  6. 《剑指Offer》 包含min函数的栈
  7. 聊城初中计算机考试分数线,2021年聊城中考最低录取线是多少,聊城历年中考分数线统计...
  8. jq中html(),text(),val()以及js中innerHTML,innerText和value
  9. 从15000个Python开源项目中精选TOP30,GitHub平均star为3707,赶紧收藏!
  10. 关于JS !!flag 语法
  11. Linux内核源代码分析——vmstat核心代码注释
  12. php 替换数字和字母,php preg_替换非字母数字字符并选择连词,然后拆分
  13. echarts3 地图文字位置设置
  14. ps中100%比例放大图片显示的快捷键
  15. 基于Python/Flask框架的双色球数据采集(爬虫)及大数据可视化平台设计与实现
  16. 2023-03-27-安装office365显示Microsoft Office 专业增强版 2016
  17. 虚拟机中的计算机名称,如何获取VMware虚拟机主机的名称和IP?
  18. 微信公众号小程序如何做流媒体视频直播?
  19. vue 路由history模式打包部署 The requested URL * was not found on this server. 的解决方法
  20. Superset-轻量级开源可视化BI工具

热门文章

  1. java synchronized 使用_Java中Synchronized的用法
  2. python哨兵循环_Python通用循环的构造方法实例分析
  3. 开源的关于智能车竞赛光电起始点方案
  4. 但是我们还是不想留遗憾,我们不后悔!
  5. 五一假期最后一天,会开了
  6. oracle imp 00028,oracle中导入.dmp文件时出现IMP-00009 和IMP-00028异常提示
  7. android电源驱动程序,[转]Android虚拟电源管理驱动
  8. java框架三层架构是_MVC框架模式和Javaweb经典三层架构
  9. 计算机程序设计员_第二届北京大工匠计算机程序设计员、网络与信息安全管理员挑战赛:一场互联网“战场”的巅峰对决...
  10. 使用vux+ajax,Vue 应用中结合vux使用微信 jssdk的方法