为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中期中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)
标签:
为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中期中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)
6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
大意:DP三要素:初始状态,状态方程,边界
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MAX = 110000; int dp[MAX][12]; int main() { int n,x,t,t1; t1 = 0; while(~scanf("%d",&n)&&n){ memset(dp,0,sizeof(dp)); for(int i =1 ; i <= n;i++){ scanf("%d%d",&t,&x); dp[x][t]++; if(t1 < t) t1 = t; } for(int i = t1; i >= 0;i--){ dp[i][0] += max(dp[i+1][1],dp[i+1][0]); for(int j = 0 ; j <= 10; j++){ dp[i][j] += max(max(dp[i+1][j],dp[i+1][j+1]),dp[i+1][j-1]); } } printf("%d\n",dp[0][5]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zero-begin/p/4374730.html