Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 64677 Accepted Submission(s): 22761
为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)
提示:本题的输入数据量比较大,建议用scanf读入,用cin可能会超时。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int dp[100005][15]; 4 int main(){ 5 int n,x,t,i,j,end; 6 while(~scanf("%d",&n),n){ 7 end = 0; 8 memset(dp,0,sizeof(dp)); 9 while(n--){ 10 scanf("%d%d",&x,&t); 11 dp[t][x+1]++; 12 end = max(end,t); 13 } 14 for(i = end;i>=0;i--){ 15 for(j = 1;j<=11;j++){ 16 dp[i][j] += max(dp[i+1][j],max(dp[i+1][j-1],dp[i+1][j+1])); 17 } 18 } 19 printf("%d\n",dp[0][6]); 20 } 21 return 0; 22 }