HDOJ 1176 免费馅饼 简单解题报告
数塔的变形体,额,这么一想就简单多了。。。
第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
...
和数塔相同的解法,自下而上,取较大值即可,下面是笔者的AC的代码:
#include <iostream> using namespace std; int maxOfThree(int a,int b,int c) { return a>b?(a>c?a:c):(b>c?b:c); } int dp[13][100010]; int main() { int i,j,n,a,b,max; while(scanf("%d",&n) && n) { memset(dp,0,sizeof(dp)); max=0; for(i=0;i<n;i++) { scanf("%d%d",&a,&b); dp[a+1][b]++; if(max<b) max=b; } for(i=max-1;i>=0;i--) for(j=1;j<=11;j++) dp[j][i]+=maxOfThree(dp[j][i+1],dp[j-1][i+1],dp[j+1][i+1]); cout<<dp[6][0]<<endl; } }
面对一个问题,看的越深入,方法越简单。