1 条题解
-
0
Guest MOD
-
2
本题改编至
[CSP-J] 2024 T3,如果你 AC 了此题,赶紧 AC 了[CSP-J] 2024 T3把错误想法(必看)
首先,拿到这个题,你肯定想:这也太简单了,计算出 ,让后在疯狂输出这个数,直到没有油漆,对吧!如果你这么想,恭喜你,你就拿到 分(
因为数据一点都不水),让后你会发现你成功的 WA 了。为什么会 WA?因为我可以出一个样例来告诉你,你是错的:5 2 3 9 9 9 9 9 9 9你运行后会输出 ,但答案是 ,因为写出 只需用 升油漆,刚好够。
怎么样,你服不服。正解
本题可以考虑贪心。 首先,我们数位越多,数字就越大,所以我们可以计算出最多有多少位,怎么算? 当然是
很明显吧! 然后从高到低一位一位的枚举,在枚举第 位填什么(从 枚举,贪心从大到小,在判断如果这一位填了这个数字剩下的全填 可不可以,可以的话就输出这个数。
就是这么简单,嘻嘻!代码环节!
#include <bits/stdc++.h> using namespace std; int n, a[10]; int main() { scanf("%d", &n); int len = 0, m = 1 << 30; for (int i = 1; i <= 9; i++) scanf("%d", &a[i]), m = min(m, a[i]); // a min len = n / m; // 最小位数 for (int i = 1; i <= len; i++) for (int j = 9; j; j--) // 一定要从9到 1 if ((len - i) * m <= n - a[j]) { // 剩余位数 * a min <= 剩余油漆 n -= a[j]; printf("%d", j); break; } }
- 1
信息
- ID
- 1668
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 12
- 已通过
- 5
- 上传者