免费馅饼
来源:互联网 发布:淘宝购物车图片大全 编辑:程序博客网 时间:2024/04/27 16:00
DP经典,想了好久才搞明白。。这道题可以说是数塔的变形。我们可以将第T秒可能到达的位置建成一个数塔:(注意0和10的位置的特殊性)
第0秒 5
第1秒 4 5 6
第2秒 3 4 5 6 7
第3秒 2 3 4 5 6 7 8
第4秒 1 2 3 4 5 6 7 8 9
第5秒 0 1 2 3 4 5 6 7 8 9 10
第6秒 0 1 2 3 4 5 6 7 8 9 10
第1秒 4 5 6
第2秒 3 4 5 6 7
第3秒 2 3 4 5 6 7 8
第4秒 1 2 3 4 5 6 7 8 9
第5秒 0 1 2 3 4 5 6 7 8 9 10
第6秒 0 1 2 3 4 5 6 7 8 9 10
用数组dp[i][j]来表示第i秒gameboy在j位置上,那么就可以得出它的状态转移方程为:
①当j==0时:dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);
②当j==10时:dp[i][j]+=max(dp[i+1][j],dp[i+1][j-1]);
③当j>0&&j<10时:dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j-1]),dp[i+1][j+1])。
③当j>0&&j<10时:dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j-1]),dp[i+1][j+1])。
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[100005][15];int main(){int i,j,n,cnt;int x,t;while(scanf("%d",&n),n){memset(dp,0,sizeof(dp));//初始化 cnt=0;for(i=1;i<=n;i++){scanf("%d%d",&x,&t);cnt=max(t,cnt);//记录最大的时间 dp[t][x]++;//将第i秒位置j加1,记录各个位置掉馅饼的个数 }for(i=cnt-1;i>=0;i--){//从下往上 for(j=0;j<=10;j++){if(j==0)dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);else if(j==10)dp[i][j]+=max(dp[i+1][j],dp[i+1][j-1]);elsedp[i][j]+=max(max(dp[i+1][j],dp[i+1][j-1]),dp[i+1][j+1]);}}printf("%d\n",dp[0][5]);//起点(即反向的终点) }return 0;}
第0秒
第1秒
第2秒
第3秒
第4秒
第5秒
第6秒
0 0
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 免费馅饼
- 我从华为身上学到的项目管理经验 -- 设计篇
- QEvent类参考
- app真机调试
- 请求内容分析&Request+Response解析
- C++课程设计报告总结
- 免费馅饼
- android反射调用 .
- iOS- 浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法
- Android控件之AutoCompleteTextView和MultiAutoCompleteTextView
- Android中的MVC设计模式
- 2016 Multi-University Training Contest 7题解报告
- 我从华为身上学到的项目管理经验 -- 编码阶段篇
- Mysql --分区表(5)Columns分区
- 彻底解决SSH架构中的Hibernate懒加载问题