标签: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