6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
#include<stdio.h> #include<string.h> int a[100100][15]; int max(int a,int b) { if(a<b) return b; else return a; } int main() { int n,maxi,i,t,x,j; while(~scanf("%d",&n),n) { maxi=0; memset(a,0,sizeof(a)); for(i=0;i<n;i++) { scanf("%d%d",&x,&t); a[t][x]++; if(maxi<t) maxi=t; } for(i=maxi-1;i>=0;i--) { for(j=0;j<=10;j++) { if(j==0) a[i][j]+=max(a[i+1][j],a[i+1][j+1]);//因位于一个边界,所以只有两种选择 else if(j==10) a[i][j]+=max(a[i+1][j-1],a[i+1][j]); else a[i][j]+=max(max(a[i+1][j-1],a[i+1][j]),a[i+1][j+1]);//可以有三处可以选择的 } } printf("%d\n",a[0][5]);//起始位置,也是塔的顶点。 } return 0; }
hdu 1176 免费馅饼 (dp 数塔类型),布布扣,bubuko.com
原文地址:http://blog.csdn.net/ice_alone/article/details/38707603