hdu 1176 免费馅饼

这个题目第一眼看了真没思路,也没想到跟动态规划有关系,最后还是看了Tanky Woo的文章才明白

 

看图片对比一下,数轴以5为塔顶,左右两边依次往下落,就形成数塔

  题目传送门

 1 #include<stdio.h>
 2 #include<string.h>
 3 int dp[11][100001];
 4 int max(int a, int b)
 5 {
 6     return a>b?a:b;
 7 }
 8 
 9 int main()
10 {
11     int n,x,t,maxtime;
12     int i,j;
13     while(scanf("%d",&n),n)
14     {
15         memset(dp,0,sizeof(dp));
16         maxtime = 0;
17         for(i=0;i<n;i++)
18         {
19             scanf("%d%d",&x,&t);
20             ++dp[x][t];
21             maxtime = t>maxtime?t:maxtime;
22         }
23         for(j=maxtime-1;j>=0;j--)
24         {
25             dp[0][j] += max(dp[0][j+1], dp[1][j+1]);
26             dp[10][j] += max(dp[10][j+1], dp[9][j+1]);
27             for(i=1;i<10;i++)
28                 dp[i][j] += max(max(dp[i][j+1], dp[i+1][j+1]),dp[i-1][j+1]);
29         }
30         printf("%d\n",dp[5][0]);
31     }
32     return 0;
33 }

参考:http://www.wutianqi.com/?p=2457

 

posted @ 2013-05-10 15:07  飞向梦  阅读(108)  评论(0编辑  收藏  举报