HDU 1176 免费馅饼 (TEST 11-11)

HDU 1176 免费馅饼

TEST<28>(11-11)

解题思路

从后往前推出每一秒每个位置的 最大馅饼的数量
因为 每一秒 此位置的 馅饼总数量都是由前一秒
可能的 3个位置 位移产生(+1,0,-1)每次每个位置
都取最大值 呢么 最终 起点的 也是整个的最大值
dp[][]数组作为最大值累计数组,a[][]作为馅饼掉落标记数组

AC 代码如下

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#define INF 100002
using namespace std;
int dp[100005][15], a[100005][15];
int main(){
    int n;
	while(~scanf("%d",&n) && n){
		memset(dp, 0, sizeof(dp));
		memset(a, 0, sizeof(a));
		int maxn = -1;
		for(int i = 0; i < n; i++){
            int x,y;
			scanf("%d %d",&x,&y);
			maxn = max(maxn, y);//找到最大的时间
			a[y][x]++; //累加标记 掉落的馅饼
		}
		for(int i = maxn; i >= 0; i--){
			//0的时候特判,10的时候因为 11一定为零所以无需特判不会 干扰结果
			dp[i][0] = max(dp[i+1][0], dp[i+1][1]) + a[i][0];
			for(int j = 1; j < 11; j++){
				dp[i][j] = max(dp[i+1][j], max(dp[i+1][j-1], dp[i+1][j+1])) + a[i][j];
			}
		}
		printf("%d\n",dp[0][5]);
	}
	return 0;
}
发布了55 篇原创文章 · 获赞 1 · 访问量 977

猜你喜欢

转载自blog.csdn.net/weixin_43556527/article/details/103021496
今日推荐