题目翻译 在2214年的的 “Russian代码杯” 的决赛选手将是在淘汰赛中的获胜者。
两种形式的选拔赛 淘汰赛有两种形式,我们把他叫正常赛与特殊赛,
正常赛中的题目为 c 道,获胜的 n 个人可以参加决赛;特殊赛题目为 d 道,获胜的 1 个人可参加决赛。
此外,有 k 位大佬拥有报送名额,不用参加淘汰赛。(黑幕)
组委会需要你组织好各轮淘汰赛,比赛用到的题目要最少,但是保证在所有淘汰赛结束后,有 n * m 位选手进入决赛。
输入格式 第 1 行输入 c 和 d 第 2 行输入 n 和 m 第 3 行输入 k
输出格式 输出最少需要多少道题目
输入样例1 1 10 7 2 1
输出样例1 2
输入样例2 2 2 2 1 2
输出样例2 0
数据范围 1 ≤ c, d ≤ 100 1 ≤ n, m ≤ 100 1 ≤ k ≤ 100
题解 完全背包(优化2.0):
题目没要求通过比赛进入决赛的人数严格为 n * m - k
#include <iostream> #include <cstring> using namespace std; const int N = 10010; int c, d, n, m, k; int v[4], w[4], f[N]; int main() { memset(f, 0x3f, sizeof f); cin >> c >> d >> n >> m >> k; v[1] = n, v[2] = 1; w[1] = c, w[2] = d; f[0] = 0; for (int i = 1; i <= 2; i ++) for (int j = v[i]; j <= n * m; j ++) f[j] = min(f[j], f[j - v[i]] + w[i]); int ans = 0x3f3f3f3f; for (int i = n * m - k; i <= n * m; i ++) ans = min(ans, f[i]); cout << ans << endl; return 0; }