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 值 ++ ,代表从开始点一步到该点的情况,而后面的则只需要传递种类数就行。
递推代码:
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/递推相关推荐
- HDU 4489 (DP递推计数)
DP 递推计数 题意: 这是一道比较神奇的题,很考验思维:有n个高低不同的人,现在需要进行排列,排列一定要满足两种方式 高低高··· 低高低··· 求出有多少排列方式. 思路: 我们的切入点是第i个人 ...
- Two Arrays(DP递推)
You are given two integers nn and mm. Calculate the number of pairs of arrays (a,b)(a,b) such that: ...
- 动态规划入门之dp递推~
欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- 本篇文章重在递推,不 ...
- hdu 5273(递推)
题目:给定多个询问,找到区间[l,r]的逆序数对数. 解题思路: 这道题目其实就是递推,只要找到递推公式即可.dp[i][j]表示在区间[i,j]内,逆序数的对数,则有递推式:dp[i][j] = d ...
- POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂
哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种 递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列 ,可以放的方法一共有5种 1.放4个 1×2 则 为dp[n-2] ...
- BZOJ 3329: Xorequ(数位dp+递推)
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...
- Power oj2498/DP/递推
power oj 2498 /递推 2498: 新年礼物 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submit: 12 Accepted: 3 ...
- HDU-5965 扫雷(dp / 递推)
传送门 扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知 ...
- 2019.08.20【NOIP提高组】模拟 B 组 排序、DP+递推、矩阵乘法+数位DP/类欧
文章目录 0 旅游(travel) 1 做梦(dream) 2 数数(count) 初见时,她说,"我无力自保,无处可去,无人可依." 多年后,他说,"我教你射箭,你已有 ...
最新文章
- 如何安装或卸载 Internet Explorer 9?
- lua如何判断是否支持cookie_如何判断家里暖气片是否需要更换
- setsockopt()函数使用详解
- HAN:基于双层注意力机制的异质图深度神经网络
- [MSSQL]COALESCE与ISNULL函数
- 《剑指Offer》 包含min函数的栈
- 聊城初中计算机考试分数线,2021年聊城中考最低录取线是多少,聊城历年中考分数线统计...
- jq中html(),text(),val()以及js中innerHTML,innerText和value
- 从15000个Python开源项目中精选TOP30,GitHub平均star为3707,赶紧收藏!
- 关于JS !!flag 语法
- Linux内核源代码分析——vmstat核心代码注释
- php 替换数字和字母,php preg_替换非字母数字字符并选择连词,然后拆分
- echarts3 地图文字位置设置
- ps中100%比例放大图片显示的快捷键
- 基于Python/Flask框架的双色球数据采集(爬虫)及大数据可视化平台设计与实现
- 2023-03-27-安装office365显示Microsoft Office 专业增强版 2016
- 虚拟机中的计算机名称,如何获取VMware虚拟机主机的名称和IP?
- 微信公众号小程序如何做流媒体视频直播?
- vue 路由history模式打包部署 The requested URL * was not found on this server. 的解决方法
- Superset-轻量级开源可视化BI工具
热门文章
- java synchronized 使用_Java中Synchronized的用法
- python哨兵循环_Python通用循环的构造方法实例分析
- 开源的关于智能车竞赛光电起始点方案
- 但是我们还是不想留遗憾,我们不后悔!
- 五一假期最后一天,会开了
- oracle imp 00028,oracle中导入.dmp文件时出现IMP-00009 和IMP-00028异常提示
- android电源驱动程序,[转]Android虚拟电源管理驱动
- java框架三层架构是_MVC框架模式和Javaweb经典三层架构
- 计算机程序设计员_第二届北京大工匠计算机程序设计员、网络与信息安全管理员挑战赛:一场互联网“战场”的巅峰对决...
- 使用vux+ajax,Vue 应用中结合vux使用微信 jssdk的方法