题目
给定n个选手,将他们分成若干只队伍。其中第i个选手要求自己所属的队伍的人数大等于a[i]人。
在满足所有选手的要求的前提下,最大化队伍的总数。
注:每个选手属于且仅属于一支队伍。
分析
这道题要排正序,因为后面的数是按照前面的数来进行分组,所以前面的会满足后面的。如果按照逆序,就GG了。
程序
#include<iostream>
#include<algorithm>
using namespace std;
int n,a[1000000],f[1000000],g[1000000];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(i>=a[i]) f[i]=g[i-a[i]]+1;
g[i]=max(f[i],g[i-1]);
}
cout<<f[n]<<endl;
}