这题太毒了。。。。一开始就是死活想不到,结果看了很多遍题解,重新做的时候还是做不出来。。
好像有一点被错误的题解误导了?
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 }