CF1307A Cow and Haybales 题解

题目传送门

这题的主要思路其实就是贪心

由于移动的次数限制,所以根据贪心的算法,我们发现,无论是哪个数,能给 \(a[1]\) 做的贡献都是一样的,但花费不一样,肯定是离 \(a[1]\) 越近,效率越高啊!所以我们写代码时尽量先从左往右向 \(a[1]\) 移。

最后,通过模拟,就可找出答案。

代码:

#include <bits/stdc++.h>
using namespace std;
int t; //t表示组数
int main()
{
	cin >> t;
	while (t --)
	{
		int ans, n, d, a[101]; //ans记录答案, n是个数,d是次数 
		cin >> n >> d;
		cin >> a[1];
		ans = a[1]; //初始化答案
		for (int i = 2; i <= n; i ++) //切记,从2开始!!!
			cin >> a[i]; //输入 
		for (int i = 2; i <= n; i ++) //i表示当前移动到的位置
		{
			if (d < i - 1) break; //如果一个都换不了,直接break 
			if (d >= a[i] * (i - 1)) ans += a[i], d -= a[i] * (i - 1); //更新答案
			else ans += d / (i - 1), d -= d / (i - 1) * (i - 1); //同样的更新 
		}
		cout << ans << endl; //输出 
	}
	return 0; //打完收工,回家 
} 

这是本蒟蒻的第一篇题解,请大家多多关照。

posted @ 2023-02-14 17:19  Fislett  阅读(21)  评论(0)    收藏  举报