Fox and Box Accumulation 题解
题目传送门
一道贪心题。
我们先将箱子的力量值从小到大排序,优先将小的放顶上,只要还能在底下放就放,否则就到下一个堆。
为什么要从小到大往下放呢?因为越小的力量值能放的位置就越少,所以尽早放一定是最优的。相反,力量值大的选择更多。
Code
#include <bits/stdc++.h>
#define ll long long
#define INF 1e9
using namespace std;
int n, ans;
int a[105];
bool vis[105]; // vis[i] = 1 表示这个箱子已经用过了
signed main() {
ios :: sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + 1 + n);
for (int i = 1; i <= n; i++) {
if (vis[i]) continue;
vis[i] = 1;
int cnt = 1; // 当前最顶上有 1 个
for (int j = i + 1; j <= n; j++) {
if (!vis[j] and cnt <= a[j]) {
vis[j] = 1;
cnt++;
}
}
ans++;
}
cout << ans;
return 0;
}