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

一开始的感觉用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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值