C2. Exam in BerSU (hard version)(贪心策略题)

Cytheria ·
更新时间:2024-09-20
· 970 次阅读

一开始的感觉用multiset维护一个堆来做,发现思路乱七八糟。
看了别人的题解,1分钟的事情,思维还是很重要啊。
经验:当强调序列是有序的,要考虑是不是边输入边维护。
思路:每次输入时间时,计算在减去当前时间的剩下时间,最多可以让几个人考试,然后贪心从时间小的开始,并维护每个前序中每个时间出现的次数。

int a[105]; int main()//有序的问题很可能是边输入,边维护 { int n, m; while (cin >> n >> m) { f(i, 1, n) { scanf("%d", &t); int remain = m - t;//剩下可以让他之前的人考试的时间 int ans = 0; f(j, 1, 100)//贪心 从时间少的开始选 { int x = min(remain / j, a[j]);//总时间和每个时间的次数限制下的最多可考数 ans += x; remain -= j * x; } a[t]++; printf("%d ", i-1 - ans); } } return 0; }
作者:DQYZhwk



version IN c2

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章