NYOJ_613_免费馅饼
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; int g[100005][13];//g[i][j]相当于i秒、j位置的饼能被接到的情况下,时间从后往前的接饼最大值 int max(int a,int b,int c) { if(a<b) a=b; if(a<c) a=c; return a; } int main() { int n,i,j,l,t,x,T; while(~scanf("%d",&n)&&n) { T=0; memset(g,0,sizeof(g)); for(i=0;i<n;++i) { scanf("%d%d",&x,&t); g[t][x+1]++;//横坐标+1有助于计算。g[t][x+1]为当前时间下饼数 T=T<t?t:T; } for(i=T;i>=0;--i) for(j=1;j<12;++j) { g[i][j]+=max(g[i+1][j],g[i+1][j-1],g[i+1][j+1]); //相当于三路数塔,i、j位置的饼,可以被三个位置接到,选哪条路就要看最大值了 } printf("%d\n",g[0][6]);//起点 } return 0; }