11054 - Wine trading in Gergovia

本文探讨了一个关于酒买卖运送的问题,在一系列相连的房子中,每个房子的主人要么买酒要么卖酒,且总量相等。文章提供了一种算法来解决如何以最低成本完成酒的运送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


题目:11054 - Wine trading in Gergovia


题目大意:每个房子的主人要么买酒,要么卖酒,买和卖的酒的数量一致。卖酒的人需要将酒运送到买酒的人的家里,每将一瓶酒运到相邻的房子就需要耗费一单元的费用,问怎样能使得整体的运送费用最少。


解题思路:不论是卖和买,都需要运送。这样就可以从第一家开始把他手上拥有的酒,或是他想要的酒转移到相邻的那一家。如果刚好一个卖酒一个买酒的话,另一家的需求数量就会减少,反之,如果都是卖,或者都是买,另一家的需求数量酒会增加。这样第一家之后就可以不用考虑了,因为他已将酒买卖全权交给隔壁那一家了。这样往后,最后一家的需求一定是0,因为卖酒买酒总数是固定的。


代码:

#include <stdio.h>
#include <stdlib.h>

const int N = 100005;
long long wines[N];

int main () {

	int n;
	while (scanf ("%d", &n), n) {
		
		for (int i = 0; i < n; i++) {

			scanf ("%lld", &wines[i]);
		}
		long long count = labs(wines[0]); 
		for (int i = 1; i < n; i++) {
			
			wines[i] += wines[i - 1];
			count += labs(wines[i]);	
		}
		printf ("%lld\n", count);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值