题目:
6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
想法:想了老长时间也没个思路,于是搜了一下,参照了“搁浅の记忆”的,看了一下如下的图,突然明白了,直接把图贴这里了。。
5 i = 0;
5 6 7 i = 1;
4 5 6 7 8 i = 2;
3 4 5 6 7 8 9 i = 3;
2 3 4 5 6 7 8 9 10 i = 4;
1 2 3 4 5 6 7 8 9 10 11 i = 5;
1 2 3 4 5 6 7 8 9 10 11 i = 6;
。。。。。。。。。。。。 。。。
dp方程:
dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j+1]),dp[i+1][j])
然后为啥用cin会超时而用scanf不会超时的原因可以参考下这位大神的。。
http://blog.youkuaiyun.com/lttree/article/details/14005697
代码:
#include<stdio.h>
#include <iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int INF=0x3f3f3f3f;
int dp[100010][20];
int main()
{
int n,i,j,M,x,T;
while(scanf("%d",&n),n)
{
memset(dp,0,sizeof(dp));
M=-INF;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&T);
M=max(M,T);
dp[T][x+1]++;
}
for(i=M;i>=0;i--)
{
for(j=1;j<=11;j++)
dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j+1]),dp[i+1][j]);
}
printf("%d\n", dp[0][6]);
}
return 0;
}
本文通过一个趣味性的馅饼接取问题,介绍了如何使用动态规划算法解决实际问题。gameboy在一条限定范围的小径上接从天而降的馅饼,目标是在规定时间内接取最多的馅饼。文章详细解析了问题背景、输入输出要求及样例,并提供了实现代码。
1066

被折叠的 条评论
为什么被折叠?



