hdu 1176 免费馅饼(数塔问题)

来源:互联网 发布:西门子系统圆弧编程 编辑:程序博客网 时间:2024/05/21 23:46
//考察点:dp,简单数塔,从下往上不断dp,最后得到的为最大值//思路,第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//提交情况 WA一次,原因:for(j=1;j<=9;j++)中j写成从0开始了,粗心了。//收获,学到了数塔的知识//AC code#include<iostream>using namespace std;int dp[100005][12];int x,T;int max3(int a,int b,int c){return c>(a>b?a:b)?c:(a>b?a:b);}int main(){int n;while(scanf("%d",&n)&&n){memset(dp,0,sizeof(dp));int i,j,Max=-1;for(i=0;i<n;i++){scanf("%d%d",&x,&T);if(Max<T)Max=T;dp[T][x]++;}for(i=Max-1;i>=0;i--){if(i>4){dp[i][0]+=max(dp[i+1][0],dp[i+1][1]);for(j=1;j<=9;j++){dp[i][j]+=max3(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);}dp[i][10]+=max(dp[i+1][9],dp[i+1][10]);}else{for(j=5-i;j<=5+i;j++){dp[i][j]+=max3(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);}}}printf("%d\n",dp[0][5]);}return 0;}

原创粉丝点击