HDOJ1176

HDOJ1176

作为一个弱鸡,这道题目花了我很长的时间orz,首先花了很长的时间去理解这道题其实和数塔(ACM2084)实质其实一模一样,甚至连代码都差不多orz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXN 140000
int a[MAXN][11];
int main()
{
int n, position, time;
while (cin>>n&&n) {
int max_time = 0;
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++) {
scanf_s("%d%d", &position, &time);
a[time][position]++;
max_time = max(max_time, time);
}
for (int i = max_time - 1; i >= 0; i--)
{
for (int j = 0; j <= 10; j++)
{
if(j==0)
{
a[i][j] += max(a[i + 1][j], a[i + 1][j +1]);
continue;
}
if(j==10)
{
a[i][j] += max(a[i + 1][j], a[i + 1][j - 1]);
continue;
}
a[i][j] += max(max(a[i + 1][j ], a[i + 1][j+1]), a[i + 1][j - 1]);
}
}
cout << a[0][5] << endl;
}
return 0;
}