地主希望找到一种切分方法,使得完成切分后能给金匠最少的铜币。

参考链接(https://blog.csdn.net/u013011841/article/details/38226099

原题:
过年的时候地主给长工发工钱,地主打算切开一根金条,按照长工的工作量每人分一部分。只有金匠才能切开金条,每切一次,金匠要收金条长度个铜币,比如长度为15的金条切开一次要收15个铜币。地主希望找到一种切分方法,使得完成切分后能给金匠最少的铜币。
距离说明,比如金条长30,需要分给4位长工,每人分到的分别是6,7,8,9。一种切分方式是先切成15和15,然后再分别切分成6和9,7和8,此时地主需要给金匠的铜币最少,一共60个。

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

int main(void)
{
	int n, W[1001];
	int result=0;       //最小带权路径长度为非叶子结点的和
	while (cin>>n)
	{
		for (int i = 0; i < n; ++i)
			cin >> W[i];
		for (int i = 0; i < n-1; ++i) {
			sort(W, W + n);
			result += W[i] + W[i + 1];
			W[i + 1] = W[i] + W[i + 1];
		}
		cout << result;
	}
	return 0;
}

输出结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值