本文主要是介绍摆箱子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Description
有一堆形状完全一样的箱子,但是他们的强度不同,如果一个箱子的强度为x,那么这个箱子上面最多可以放x个箱子。
现在我们已知一堆箱子的强度,我们想把这些箱子放置成一列一列的形状,每一列包含多个箱子,问最少可以放置多少列。
Input
输入为多组数据,第一行为样例数T。
每组数据先输入一个n(1 <= n <= 100),表示箱子的总数。
紧接着输入n个数x1,x2,x3,,,xn(0 <= xi <= 100),第i个数表示第i个箱子的强度。
Output
输出只包含一个整数,表示最少的数列。
Sample Input
2
3
0 0 10
5
0 1 2 3 4
Sample Output
2
1
#include<bits/stdc++.h>
using namespace std;int a[100+10], b[100+10];
int main()
{int T, n;scanf("%d", &T);while(T--){scanf("%d", &n);memset(a, -1, sizeof(a));memset(b, 0, sizeof(b));for (int i = 0; i < n; i++)scanf("%d", &a[i]);sort(a, a+n);int t = n, ans = 0;;while(t > 0){int flag = 0, num = 0;for(int i = 0; i < n; i++){if(b[i] == 0 && flag == 0){flag = 1;b[i] = 1;num++;t--;}if(b[i] == 0 && flag == 1){if(a[i] >= num){num++;b[i] = 1;t--;}}}ans++;}printf("%d\n",ans);}return 0;
}
这篇关于摆箱子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!