标签:des style blog io os ar java for sp
lwg
题目大意:总共有0~10个位置,gameboy站在5的位置上。给你馅饼
掉落的时间的位置。gameboy每秒只能到自己位置临近的位置接馅饼。
比如在5的位置上只能接到4 5 6的馅饼。在7的位置上只能接到 6 7 8的
馅饼。问gameboy最后最多能接到多少馅饼。
思路:动态规划的思想。
将位置整体右移一个单位。位置为1~11。这样方便计算。
建立二维数组。一维代表时间,二维代表位置。点上的值代表馅饼的个数。
按时间顺序存储馅饼个数。
最后从底往上递推。每次比较馅饼位置i和馅饼位置i-1和馅饼位置i+1的馅饼
个数。dp[i][j] = max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+v[i][j];
dp[0][6]就是最终结果。
#include<stdio.h>
#include<string.h>
int dp[100010][12];
int main()
{
int n,pos,time,Maxtime;
while(~scanf("%d",&n) && n)
{
Maxtime = 0;
memset(dp,0,sizeof(dp));
for(int i = 1; i <= n; i++)
{
scanf("%d%d",&pos,&time);
dp[time][pos+1]++;//pos为0的时候左边还得加判断,这里位置整体右移
if(time > Maxtime)
Maxtime = time;
}
for(int i = Maxtime-1; i >= 0; i--)
{
for(int j = 1; j <= 11;j++)
{
int num1 = dp[i+1][j-1];
int num2 = dp[i+1][j];
int num3 = dp[i+1][j+1];
int Max = 0;
if(Max < num1)
Max = num1;
if(Max < num2)
Max = num2;
if(Max < num3)
Max = num3;
dp[i][j] += Max;
}
}
printf("%d\n",dp[0][6]);
}
return 0;
}
标签:des style blog io os ar java for sp
原文地址:http://blog.csdn.net/lianai911/article/details/40371129