洛谷 P3817 小A的糖果

时间:2020-03-26
本文章向大家介绍洛谷 P3817 小A的糖果,主要包括洛谷 P3817 小A的糖果使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

P3817 小A的糖果
贪心问题:要保证每一对相邻的盒加起来不超过限定,则对其中一对来说,a[i]与a[i+1],如果a[i]超了则限定a[i]在x以下,a[i+1]超了,限定a[i+1]在x一下,然后如果a[i]+a[i+1]超了,先用a[i+1]去减,不够再用a[i],最后一个要特殊处理即可。
记得答案要用longlong

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

const int N = 100010;

int a[N];
int main()
{
	int n, x;
	cin >> n >> x;
	for (int i=0; i < n; i++)
	{
		cin >> a[i];
	}
	int c, d;
	long long ans = 0;
	for (int i = 0; i < n - 2; i++)
	{
		if (a[i] > x)
		{
			ans += a[i] - x;
			a[i] =x;
		}
		if (a[i + 1] > x)
		{
			ans += a[i + 1] - x;
			a[i + 1] = x;
		}
		if (a[i] + a[i + 1] > x)
		{
			c = a[i] + a[i + 1] - x;
			if (a[i + 1] >= c)
			{
				ans +=  c;
				a[i + 1] -= c;
			}
			else
			{
				ans += c;
				c -= a[i + 1];
				a[i + 1] = 0;
				a[i] -= c;
			}
		}
	}
	int a1 = a[n - 2], a2 = a[n - 1];
	if (a1 > x)
	{
		ans += a1 - x;
		a1 = x;
	}
	if (a2> x)
	{
		ans += a2- x;
		a2 = x;
	}
	if (a2 + a1 > x)
	{
		c = a2 + a1 - x;
		if (a1 >= c)
		{
			ans += c;
			a1-= c;
		}
		else
		{
			ans += c;
			c -= a1;
			a1 = 0;
			a2 -= c;
		}
	}

	cout << ans;
	return 0;
}

原文地址:https://www.cnblogs.com/kreamyu/p/12574381.html