专栏文章

题解:CF846B Math Show

CF846B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqjscw6
此快照首次捕获于
2025/12/04 05:57
3 个月前
此快照最后确认于
2025/12/04 05:57
3 个月前
查看原文

题目传送门

思路:

考虑用模拟得到最优的方式。首先枚举可以完成 ii 个大的任务,然后循环找到从时间到最大的,其实就是暴力求解,数据不大。

AC Code

CPP
#include<bits/stdc++.h>
#define int long long//注意不开long long见祖宗
using namespace std;
int a[45], n, k, m;
signed main() {
	while (cin >> n >> k >> m) {
		int sum = 0;
		for (int i = 1; i <= k; i++) {
			cin >> a[i],
			    sum += a[i];
		}
		stable_sort(a + 1, a + k + 1);//稳定排序一下
		int ans = 0;
		for (int i = 0; i <= n; i++) {
			if (m < i * sum) break;
			int cnt = m - i * sum, t = i * (k + 1);
			for (int j = 1; j < k; j++) {
				for (int p = 1; p <= n - i; p++) {
					if (cnt >= a[j]) t++,
					cnt -= a[j];
				}
			}
			ans = max(ans, t);
		}
		cout << ans << "\n";
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...