标签:
6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
数塔模型,从下往上求,令坐标加一,求出d[0][6],数组d[i][j]表示第i秒坐标j的馅饼数,因为一开始在坐标5时间为0,记录馅饼数坐标加1,所以最后求d[0][6]。
1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int d[100000+11][15]; 6 int max(int a,int b,int c) 7 { 8 int max0; 9 if(a > b) 10 max0=a; 11 else 12 max0=b; 13 if(max0 < c) 14 max0=c; 15 return max0; 16 } 17 int main() 18 { 19 int n; 20 while(scanf("%d",&n) && n) 21 { 22 int a,b,max0=0; 23 memset(d,0,sizeof(d)); 24 for(int i = 0 ; i < n ; i++) 25 { 26 scanf("%d %d",&a,&b); 27 d[b][a+1]++; //表示第b秒在a+1位置的馅饼 28 if(b > max0) //记录时间的最大值 29 { 30 max0=b; 31 } 32 33 } 34 for(int i = max0-1 ; i >= 0 ; i--) 35 { 36 for(int j = 1 ; j <= 11 ; j++) 37 { 38 d[i][j]=max(d[i+1][j],d[i+1][j+1],d[i+1][j-1])+d[i][j]; //反着求出d[0][i]的结果 39 } 40 } 41 printf("%d\n",d[0][6]); 42 } 43 }
标签:
原文地址:http://www.cnblogs.com/yexiaozi/p/5750883.html