洛谷 P2062 分队问题

这题太毒了。。。。一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来。。

好像有一点被错误的题解误导了?

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int n,a[1001000],f[1000100],g[1001000];
 5 //f[i]表示前i个人分组合法的组数最大值
 6 //f[i]=max{f[j]}(0<=j<=i-a[i])+1
 7 //g[i]=max{g[j]}(0<=j<=i)
 8 int main()
 9 {
10     int i;
11     scanf("%d",&n);
12     for(i=1;i<=n;i++)    scanf("%d",&a[i]);
13     sort(a+1,a+n+1);
14     for(i=1;i<=n;i++)
15     {
16         f[i]=g[max(0,i-a[i])]+1;
17         g[i]=max(g[i-1],f[i]);
18     }
19     printf("%d",f[n]);
20     return 0;
21 }

 

posted @ 2018-04-01 16:48  hehe_54321  阅读(264)  评论(0编辑  收藏  举报
AmazingCounters.com