这道题是中文描述的,我相信大家都肯定能够看得懂(滑稽),思路上呢大概就是一个升级版的数塔(点我去看数塔)既然是动态规划问题所以首先肯定要先找出来状态转移方程,我找到的状态转移方程就是a[i][j] += max(max(a[i+1][j+1],a[i+1][j]),a[i+1][j-1]),其中a[i][j]就是表示第i时刻在k位置所能够得到的最大的馅饼数。建议大家先做完数塔再来,比较好理解这个思路,好了话不多说。
代码如下
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int n,a[100005][12];
while(scanf("%d",&n) && n)
{
memset(a,0,sizeof(a));
int maxt = 0;
for(int i = 0;i < n; i++)
{
int x,t;
scanf("%d %d",&x,&t);
a[t][x]++;
if(t > maxt)
maxt = t;
}
for(int i = maxt - 1;i >= 0; i--)
{
a[i][0] += max(a[i+1][0],a[i+1][1]);
for(int j = 1;j < 11; j++)
a[i][j] += max(max(a[i+1][j+1],a[i+1][j]),a[i+1][j-1]);
}
printf("%d\n",a[0][5]);
}
return 0;
}
标签:1176,HDU,数塔,int,max,++,maxt,馅饼,include From: https://blog.51cto.com/u_16131191/6356099