【dp】HDU - 1176 免费馅饼
2017-08-12 19:51
169 查看
Problem Description
![](https://img-blog.csdn.net/20170812194425787?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmJiYnN3YnE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼). 给你一个n,接下来有n行 x,T,分别代表n个馅饼,在T秒的时候落在了x的位置。
思路:
如果我们从0秒到T秒的话,5下一秒可以到4,5,6在下一秒又扩展了三倍,这样会把问题复杂化。所以我们逆向思考,从T秒变到0秒,这样状态转移方程就出来了dp[i][j] += max(max(dp[i + 1][j], dp[i + 1][j - 1]), dp[i + 1][j + 1]); dp[i][j]代表i这个时间,在j这个位置最多有多少个馅饼。
为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼). 给你一个n,接下来有n行 x,T,分别代表n个馅饼,在T秒的时候落在了x的位置。
思路:
如果我们从0秒到T秒的话,5下一秒可以到4,5,6在下一秒又扩展了三倍,这样会把问题复杂化。所以我们逆向思考,从T秒变到0秒,这样状态转移方程就出来了dp[i][j] += max(max(dp[i + 1][j], dp[i + 1][j - 1]), dp[i + 1][j + 1]); dp[i][j]代表i这个时间,在j这个位置最多有多少个馅饼。
#include<bits/stdc++.h> using namespace std; int dp[100055][13];//dp[i][j]代表i这个时间,在j这个位置最多有多少个馅饼。 int main() { int n, T, x, t, i, j; while(~scanf("%d", &n) && n) { memset(dp, 0, sizeof(dp)); T = 0; for(i = 0; i < n; i++)//初始化 { scanf("%d %d", &x, &t);//因为有j-1如果从0开始还得考虑越界情况,所以位置全右移动一位 dp[t][x + 1]++; if(T < t) T = t; } //一种情况变成三种,会越来越复杂,所以从三种情况变一种,也就是从后往前推 for(i = T - 1; i >= 0; i--) { for(j = 1; j <= 11; j++) { dp[i][j] += max(max(dp[i + 1][j], dp[i + 1][j - 1]), dp[i + 1][j + 1]); } } printf("%d\n", dp[0][6]);//输出 } return 0; }
相关文章推荐
- 免费馅饼 HDU - 1176 【经典DP】
- HDU 1176 免费馅饼 dp
- hdu 1176 免费馅饼(DP)
- hdu 1176 免费馅饼(简单dp)
- hdu 1176 免费馅饼(dp)
- HDU_1176 免费馅饼(DP)
- HDU 1176 免费馅饼——DP
- hdu 1176 免费馅饼(DP)
- HDU---1176-免费馅饼(DP)
- HDU 1176 - 免费馅饼(动态规划 + DP)
- 文章标题 HDU 1176:免费馅饼 (DP)
- HDU 1176 免费馅饼 DP
- HDU 1176 免费馅饼 (类似于数塔DP的题目,注意边界条件,细节处理)
- hdu1176 免费馅饼(dp)
- HDU 1176 免费馅饼 树上的dp
- HDU 1176 免费馅饼 DP
- [HDU 1176] 免费馅饼 [ DP + 思维 ]
- HDU 1176 免费馅饼 (经典dp)
- 免费馅饼 - HDU 1176 dp
- HDU 1176 免费馅饼 dp