博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1176免费馅饼
阅读量:7036 次
发布时间:2019-06-28

本文共 1244 字,大约阅读时间需要 4 分钟。

先看题:http://acm.hdu.edu.cn/showproblem.php?pid=1176

这道题的状态转移方程不难找到dp[i][j] += max(dp[i + 1][j + 1],dp[i-1][j+1],dp[i][j+1])   表示在第j秒的时候在i这个位置能接到的馅饼数 可是有两个特殊位置 0和10,这两个位置的状态转移方程需要另写dp[0][j] += max(dp[0][j+1],dp[1][i+1])   dp[10][j] += max(dp[10][j+1],dp[9][i+1]);

但是需要注意的是我们这个递推一定要从时间的最后开始推 不然也没法推  下面看代码

#include
#include
#include
#include
using namespace std;int dp[11][100001];inline int Max(int a, int b, int c=-1) //这个函数很有意思 可以求两个数中最大的也可以求三个数最大的 可以研究研究{ if(a < b) a = b; if(a < c) a = c; return a;}int main(){ int n, i, j; int t, x; while (~scanf("%d", &n)&& n) { memset(dp, 0, sizeof(dp)); int MaxTime = 0; for (i=0; i
MaxTime ? t:MaxTime; //求最大时间是多少 } for (j=MaxTime-1; j>=0; j--) //j一定为最大时间-1 { dp[0][j] += Max(dp[0][j+1], dp[1][j+1]); dp[10][j] += Max(dp[10][j+1], dp[9][j+1]); for (i=1; i<10; i++) { dp[i][j] += Max(dp[i][j+1], dp[i+1][j+1], dp[i-1][j+1]); } } printf("%d\n", dp[5][0]); //输出5这个位置0秒时就行了 } return 0;}

 

转载于:https://www.cnblogs.com/zhanyage110/p/4120295.html

你可能感兴趣的文章
PHP5各个版本的新功能和新特性总结
查看>>
http://www.tuicool.com/articles/B3qeUrB
查看>>
java 解析四则混合运算表达式并计算结果
查看>>
PulsingHalo(自定义涟漪)的使用方法
查看>>
ubuntu安装软件apt-get
查看>>
js template实现方法
查看>>
HTML <img> 标签
查看>>
rsync使用
查看>>
大话RAC介质恢复---联机日志损坏
查看>>
Unity3d之动态连接Mesh Renderer和Collider
查看>>
【编程小练习】字符串大写字母转小写
查看>>
霸气!Nginx 中缓存静态文件秘籍
查看>>
有了SSL证书,如何在IIS环境下部署https?【转载】
查看>>
浅谈Struts2拦截器的原理与实现
查看>>
C# 有关文件路径的操作
查看>>
Vcenter server 5.5安装部署
查看>>
使用Maven Assembly plugin将依赖打包进jar
查看>>
elasticsearch 基础性操作
查看>>
6个技巧加速你的gradle编译
查看>>
tp中使用事务
查看>>