1、题目链接:http://codeforces.com/problemset/problem/388/A
2、本题用贪心法。。。首先,越是承重能力弱的盒子,我们越是尽量将它放在上面。用for循环从小到大枚举堆数k,直到找到一个k,使得对所有编号为i的木块,都满足a[i]>=i/k,其中a是已排好序的记录承重能力的数组。
3、代码才20行左右。。。
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int a[110];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
for(int k=1;;k++){
bool flag=true;
for(int i=0;i<n;i++)
if(a[i]<i/k){
flag=false;
break;
}
if(flag){
printf("%d\n",k);
break;
}
}
return 0;
}