题目传送门
一道贪心题……
我们先将箱子的力量值从小到大排序,优先将小的放顶上,只要还能在底下放就放,否则就到下一个堆。
为什么要从小到大往下放呢?因为越小的力量值能放的位置就越少,所以尽早放一定是最优的。相反,力量值大的选择更多。
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include <bits/stdc++.h> #define ll long long #define INF 1e9 using namespace std; int n, ans; int a[105]; bool vis[105]; 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; for (int j = i + 1; j <= n; j++) { if (!vis[j] and cnt <= a[j]) { vis[j] = 1; cnt++; } } ans++; } cout << ans; return 0; }
|