HDU 1176(二维动态规划)

来源:互联网 发布:大数据反洗钱 编辑:程序博客网 时间:2024/05/17 22:07

分析: 和2084的数塔非常相似,不同的只是此题只用求三个数的最值。其实本质一样的,即自顶向底找一条权值最大的路径。理解数塔,这题也就更好理解了。

数塔分析模型

对于每一个位置,它下方的三个数是它下一秒可以到达的位置。
因此要求0秒5位置可以或得的最大值,只需自底向上更新数据。
dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
dp[i][j] 表示,第i秒,在位置j处可或得的最大值。

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 100002int dp[N][15];int maxx(int a,int b,int c){    a=max(a,b);    c=max(a,c);    return c;}int main(){    int n,x,t;    while(scanf("%d",&n),n)    {        int max_t=0;        memset(dp,0,sizeof(dp));        while(n--)        {            scanf("%d%d",&x,&t);            dp[t][x]++;            max_t=max(max_t,t);        }        for(int i=max_t-1;i>=0;i--)            for(int j=0;j<11;j++)                dp[i][j]+=maxx(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);        printf("%d\n",dp[0][5]);    }    return 0;}
0 0