本文文旨,如题...
转载请注明出处...
HDOJ 1176 免费馅饼
http://acm.hdu.edu.cn/showproblem.php?pid=1176
类似数塔,从底往上推,每次都是从下面三个中选最大的
1 #include<cstdio> 2 #include<cstring> 3 #define MAXN 100005 4 int dp[MAXN][11];//第i秒第j个位置的馅饼数 5 int max1(int a,int b) 6 { 7 return a>b?a:b; 8 } 9 int max2(int a,int b,int c) 10 { 11 return a>b?(a>c?a:c):(b>c?b:c); 12 } 13 int main() 14 { 15 int n,x,t,T; 16 while(~scanf("%d",&n)) 17 { 18 if(n==0) break; 19 T=0; 20 memset(dp,0,sizeof(dp)); 21 for(int i=1;i<=n;i++) 22 { 23 scanf("%d%d",&x,&t); 24 dp[t][x]++; 25 if(T<t) T=t;//时间不一定递增的,找到最大的时间 26 } 27 for(int i=T;i>=0;i--)//从底往上一层一层的加 28 { 29 for(int j=0;j<=10;j++) 30 { 31 if(j==0) dp[i][j]+=max1(dp[i+1][0],dp[i+1][1]); 32 else if(j==10) dp[i][j]+=max1(dp[i+1][9],dp[i+1][10]); 33 else dp[i][j]+=max2(dp[i+1][j+1],dp[i+1][j],dp[i+1][j-1]); 34 } 35 } 36 printf("%d\n", dp[0][5]);//起始位置在5 37 } 38 return 0; 39 }