动态规划入门——免费馅饼

转载请注明出处:http://blog.csdn.net/a1dark

分析:和数塔类似、

#include<stdio.h>
#include<string.h>
int a[100003][11];
int max(int x,int y){
    if(x>y)return x;
    else return y;
}
int main(){
    int n,i,j,x,t,maxnum;
    while(scanf("%d",&n)&&n!=0){
        memset(a,0,sizeof(a));
        maxnum=0;
        while(n--){
            scanf("%d%d",&x,&t);
            a[t][x]++;
            if(t>maxnum)maxnum=t;
        }
        for(i=maxnum;i>=0;i--){
            a[i][0]+=max(a[i+1][0],a[i+1][1]);
            for(j=1;j<10;j++)
               a[i][j]+=max(max(a[i+1][j-1],a[i+1][j]),a[i+1][j+1]);
            a[i][10]+=max(a[i+1][10],a[i+1][9]);
        }
        printf("%d\n",a[0][5]);
    }
    return 0;
}


你可能感兴趣的:(ACM,动态规划入门)