您的位置:首页 > 其它

hdoj 1176 免费馅饼

2011-02-12 19:09 176 查看
//转移方程:ans[t][x] = a[t][x] + max(ans[t - 1][x - 1], ans[t - 1][x], ans[t - 1][x + 1])
//关键处理开始的几秒
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdio>
using namespace std;
int ans[100010][11];
int a[100010][11];
int n;
int main() {
	//freopen("1.txt", "r", stdin);
	while(cin >> n && n != 0) {
		memset(a, 0, sizeof(a));
		memset(ans, 0, sizeof(ans));
		int t, x;
		int _maxT = 0;
		for(int i = 0; i < n; i++) {
			scanf("%d%d", &x, &t);
			a[t][x]++;
			_maxT = max(_maxT, t);
		}
		for(int i = 1; i <= _maxT; i++) {
			for(int j = 0; j <= 10; j++) {
				if(j == 0) ans[i][j] = max(ans[i - 1][j], ans[i - 1][j + 1]);
				else if(j == 10) ans[i][j] = max(ans[i - 1][j - 1], ans[i - 1][j]);
				else {
					ans[i][j] = max(ans[i - 1][j - 1], ans[i - 1][j]);
					ans[i][j] = max(ans[i][j], ans[i - 1][j + 1]);
				}
				ans[i][j] += a[i][j];
			}
			if(i == 1) {
				ans[1][0] = 0;
				ans[1][1] = 0;
				ans[1][2] = 0;
				ans[1][3] = 0;
				ans[1][7] = 0;
				ans[1][8] = 0;
				ans[1][9] = 0;
				ans[1][10] = 0;
			}
			if(i == 2) {
				ans[1][0] = 0;
				ans[1][1] = 0;
				ans[1][2] = 0;
				ans[1][8] = 0;
				ans[1][9] = 0;
				ans[1][10] = 0;
			}
			if(i == 3) {
				ans[1][0] = 0;
				ans[1][1] = 0;
				ans[1][9] = 0;
				ans[1][10] = 0;
			}
			if(i == 4) {
				ans[1][0] = 0;
				ans[1][10] = 0;
			}
		}
		int _max = 0;
		for(int j = 0; j <= 10; j++) {
			if(ans[_maxT][j] > _max) _max = ans[_maxT][j];
		}
		cout << _max << endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: