标签:style blog strong io for 2014 代码 时间
思路:这道题是数塔模型的一种变形。
首先,我们会看到,随着时间的不同,落下馅饼的位置也会不同,那么我们会考虑到,我们想到第i个点去接馅饼时候,会发现这时我们拥有的馅饼数量是(即状态转移方程):
dp[当前时间][当前位置]+=dp[当前时间-1][上一个位置(仔细思考会发现有3个位置)]
所以AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100005;
int dp[N][12];
int main()
{
int n,t,x,maxx,m;
while(~scanf("%d",&n))
{
if(n==0)break;
m=n;
maxx=0;
memset(dp,0,sizeof(dp));
while(m--)
{
scanf("%d%d",&x,&t);
dp[t][x] ++;
if(maxx<t)maxx=t; //优化层次
}
for(int i=maxx-1;i >= 0;i --) //从倒数第二层开始向上
{
dp[i][0]+=max(dp[i+1][0],dp[i+1][1]); //边界的特殊情况
for(int j=1;j<11;j++)
dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j]),dp[i+1][j+1]); //3个上一状态的最大值
}
printf("%d\n",dp[0][5]); //顶点
}
return 0;
}标签:style blog strong io for 2014 代码 时间
原文地址:http://blog.csdn.net/u012313382/article/details/38301417