1070 结绳 贪心

文章目录

陌陌的pat乙级题解

题解

贪心
越短的绳子折完之后,最终损失的也就越少
所以每次寻找两条最短的,每次都把折完的绳子在放回去
每次这样最长的绳子一定是在最后折的,也就损失的最少
柳神
柳神的题解更简单,不过最终的意思其实是一个样子
固定住一个绳子,每次都往里加绳子
所以加的越早,被折的次数也就越多
每次都往里面加最短的(固定的这个绳子不算)
用sort排个序,从前往后就行了

Code

#include <iostream>
#include <set>
using namespace std;
int main()
{
	int N;
	cin >> N;
	multiset<double> ret;
	for (int i = 0; i < N; i++)
	{
		int x;
		cin >> x;
		ret.insert(x);
	}
	double ans = 0;
	while (1)
	{
		if (ret.size() == 1)
		{
			cout << int(*ret.begin());
			break;
		}
		double a, b;
		a = *ret.begin();
		ret.erase(ret.begin());
		b = *ret.begin();
		ret.erase(ret.begin());
		double t = a / 2 + b / 2;
		ret.insert(t);
	}
	return 0;
}

柳神Code

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	vector<int> v(n);
	for (int i = 0; i < n; i++)
		scanf("%d", &v[i]);
	sort(v.begin(), v.end());
	int result = v[0];
	for (int i = 1; i < n; i++)
		result = (result + v[i]) / 2;
	printf("%d", result);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值