蒟蒻想不通为什么不能用贪心
查看原帖
蒟蒻想不通为什么不能用贪心
621493
qzldm楼主2022/5/25 20:08
#include<iostream>//想法是将最长的路段除二
#include<algorithm>
#include<vector>
using namespace std;
int l, n, k;//k为最多可增设路标数量,注意最多
struct la
{
	int length;
	int ju;//与上一个路标的距离
}lam[100010];
vector<int>lamp;
bool cmp(la a, la b)
{
	return a.ju > b.ju;
}
int main() 
{     
	freopen("title.in", "r", stdin);
	cin >> l >> n >> k;
	cin >> lam[0].length;
	lam[0].ju = lam[0].length;
	for (int i = 1; i < n; i++)
	{
		cin >> lam[i].length;
		lam[i].ju = lam[i].length - lam[i-1].length;
	}
	sort(lam, lam + n, cmp);
	for (int i = 0; i < n; i++)
		lamp.push_back(lam[i].ju);
	while (k)
	{
		int temp0=lamp.front() - lamp.front()/2;
		int temp1 = lamp.front()/2;
		lamp.erase(lamp.begin());
		int g = 0;
		for (int i = 0; i < lamp.size(); i++)
		{
			if (temp0 >=lamp[i])
			{
				lamp.insert(lamp.begin()+i, temp0);
				g = 1;
				break;
			}
		}
		if (g == 0)
			lamp.push_back(temp0);
		g = 0;
		for (int i = 0; i < lamp.size(); i++)
		{
			if (temp1 >=lamp[i])
			{
				lamp.insert(lamp.begin() + i, temp1);
				g = 1;
				break;
			}
		}
		if (g == 0)
			lamp.push_back(temp1);
		k--;
	}
	cout << lamp.front();
	 return 0;
}
2022/5/25 20:08
加载中...