https://vjudge.net/contest/68966#problem/G

正解一:

http://www.clanfei.com/2012/04/646.html

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<algorithm>
 6 #include<cmath>
 7 #define INF 0x3f3f3f3f
 8 using namespace std;
 9 const int maxn=1e5+1;
10 int a[11][maxn];
11 int dp[11][maxn];
12 
13 bool check(int x)
14 {
15     if(x>=0&&x<=10)
16     {
17         return 1;
18     }
19     return 0;
20 }
21 int main()
22 {
23     int n,x,y,maxtime;
24     while(scanf("%d",&n)==1&&n)
25     {
26         maxtime=-INF;
27         memset(a,0,sizeof(a));
28         for(int i=0;i<n;i++)
29         {
30             scanf("%d%d",&x,&y);
31             a[x][y]++;
32             maxtime=max(maxtime,y);
33         }
34         memset(dp,0,sizeof(dp));
35         for(int i=maxtime-1;i>=0;i--)
36         {
37             for(int k=0;k<=10;k++)
38             {
39                 dp[k][i]=dp[k][i+1];
40                 if(check(k-1))
41                 {
42                     dp[k][i]=max(dp[k][i],dp[k-1][i+1]);
43                 }
44                 if(check(k+1))
45                 {
46                     dp[k][i]=max(dp[k][i],dp[k+1][i+1]);
47                 }
48                 dp[k][i]+=a[k][i];
49             }
50         }
51         printf("%d\n",dp[5][0]);
52     }
53     return 0;
54 }
正推

相关文章: