1176 免费馅饼

来源:互联网 发布:java tomcat 部署 编辑:程序博客网 时间:2024/06/11 18:39
/*http://acm.hdu.edu.cn/showproblem.php?pid=1176与数塔是一样的 f[i][j] = get_max(f[i + 1][j], f[i + 1][j + 1], f[i + 1][j - 1]) + f[i][j]*/ #include <stdio.h>#include <string.h>long long dp[100010][15];int main(){int n;while(scanf("%d",&n) && n){memset(dp,0,sizeof(dp));int i;int p,t,maxt=0;for(i=0; i<n; i++){scanf("%d %d",&p,&t);dp[t][p+1]++;  //空出 0 的位置 方便下面  数组操作不会越界,  t 是 大于 0的 if(t>maxt) maxt=t;}for(i=maxt-1; i>0; i--) // 这里 不用 i>=0 因为  t 是 大于 0的 {int j;for(j=1; j<=11; j++){long long max=0;max = dp[i+1][j-1] > dp[i+1][j]?dp[i+1][j-1]:dp[i+1][j]; //这里j-1不会数组越界,因为j>=1 if(dp[i+1][j+1] > max)max = dp[i+1][j+1];dp[i][j] += max;} }//t 是 大于 0的  所以 比较的是 dp[1] 这一行 long long m = dp[1][5]>dp[1][6]?dp[1][5]:dp[1][6];// 0空出, 原来 5 的位置 现在是 6 if(dp[1][7]>m) m = dp[1][7];printf("%I64d\n",m);}return 0;} 

原创粉丝点击