6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
//============================================================================ // Name : problemD.cpp // Author : vit // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include <stdio.h> #include <string.h> using namespace std; int c[100001][11]; int n, x, t, i, j; int cur; int maxtime; int temp; int compare(int &a, int &b, int &c) { temp = a; if (b > temp) temp = b; if (c > temp) temp = c; return temp; } int main() { while (cin >> n && n != 0) { maxtime = 0; memset(c, 0, sizeof(c)); for (i = 0; i < n; i++) { scanf("%d %d", &x, &t); if (t > maxtime) maxtime = t; c[t][x]++; } for (i = maxtime - 1; i >= 0; i--) { for (j = 0; j <= 10; j++) { if (j == 0) { c[i][j] += max(c[i + 1][j], c[i + 1][j + 1]); } else if (j == 10) { c[i][j] += max(c[i + 1][j], c[i + 1][j - 1]); } else { c[i][j] = c[i][j] + compare(c[i + 1][j - 1], c[i + 1][j], c[i + 1][j + 1]); } } } cout << c[0][5] << endl; } return 0; }
原文:http://blog.csdn.net/svitter/article/details/23045743