Hdu1176 - 免费馅饼 - 动态规划

来源:互联网 发布:电影功夫 知乎 编辑:程序博客网 时间:2024/05/16 09:22

数塔变形题

第0秒                                               

第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

第7秒        .....................................

.......           .....................................

所以实际上从第六秒开始,所有的点都能被遍及到,那么除了两个端点(0坐标以及10坐标),所有点都是被下面一秒的三个点逆推回来的,就可以从最后的状态一点点推出最开始的状态,即dp[5][0];

#include<stdio.h>#include<string.h>int dp[12][100005];int pos,time;int max(int a,int b){return a>b?a:b;}int main(){int n;int a;while(scanf("%d",&n)!=EOF){if(n==0){break;}int i,j;int ma=0;memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){scanf("%d%d",&pos,&time);dp[pos][time]++;ma=max(time,ma);}for(i=ma-1;i>=0;i--){dp[0][i]+=max(dp[0][i+1],dp[1][i+1]);dp[10][i]+=max(dp[9][i+1],dp[10][i+1]);for(j=1;j<10;j++){dp[j][i]+=max(max(dp[j-1][i+1],dp[j][i+1]),dp[j+1][i+1]);}}printf("%d\n",dp[5][0]);}}


0 0
原创粉丝点击