hdu 1176 免费馅饼 (数塔dp)

来源:互联网 发布:上古卷轴5mac配置要求 编辑:程序博客网 时间:2024/05/07 19:42

原题链接:

http://www.cnblogs.com/DiaoCow/archive/2010/04/18/1714859.html


比较好理解。

            5 (起始位置)

     4       |      5       |       6

3   4   5  |  4   5   6  |  5   6   7


自底向上计算,保证数据最优。

状态转移方程

dp[ i ][ j ]=dp[ i+1 ][ j-1 ]+dp[ i+1 ][ j ]+dp[ i+1 ][ j+1];

代码如下:

#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<algorithm>using namespace std;const int N=100000 + 10;int dp[N][11];int main(){int  n;while (cin >> n&&n){memset(dp, 0, sizeof(dp));int x, time, maxtime = 0;for (int i = 0; i < n; i++){scanf_s("%d%d", &x, &time);dp[time][x]++;if (time>maxtime) maxtime = time;//记下最大时间}for (int i = maxtime - 1; i >= 0; i--){dp[i][0] += max(dp[i + 1][0], dp[i + 1][1]);dp[i][10] += max(dp[i + 1][9], dp[i + 1][10]);for (int j = 1; j < 10; j++)dp[i][j] += max(dp[i + 1][j - 1], max(dp[i + 1][j], dp[i + 1][j + 1]));//选择下面三个中最大的一个}printf("%d\n", dp[0][5]);}return 0;}


 




0 0