(该说不说,牛客娘是真的好看😋)题目如上,其实就是个分类讨论的问题,但是要注意一个点就是,有一个特殊的就是 "qcjjkktd" 可以同时包含 "qcjjkkt" 和 "td",所以我们只需要8个字符就可以同时获得两个快乐值,非常赚,于是我兴冲冲地就把三种分类讨论直接交上去了,然后就发现忘记讨论没有充分利用的情况成功吃到一发wa,嗯对爱吃,好了发码:
void solve() {
int n, a, b;
cin >> n >> a >> b;
int ans = 0;
// 策略1:尽可能放qcjjkkt
int cnt = n / 7; // 最多qcjjkkt数量
int left = n % 7; // 剩余字符
int use = min(cnt, left); // 能用的t数量
ans = max(ans, cnt * a + use * b + (left - use) / 2 * b);
// 策略2:全部放td
ans = max(ans, n / 2 * b);
// 策略3:8个一组(qcjjkkt+td)
int c8 = n / 8;
int l8 = n % 8;
ans = max(ans, c8 * (a + b) + l8 / 2 * b);
// 策略4:没有充分利用继续利用
if (l8 + c8 >= 7) {
int need = 7 - l8;
if (c8 >= need) {
int nc = c8 - need;
ans = max(ans, (need + 1) * a + nc * (a + b));
}
}
cout << ans << endl;
}
signed main() {
//vector<vector<int>>a(n,vector<int>(m)); 二维构造
//cout << fixed << setprecision(10); 固定小数输出
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T = 1;
cin >> T;
while (T--) solve();
return 0;
}

京公网安备 11010502036488号