ADV-148 排队打水问题

所谓贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。

在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int t[1005];
int s[1005];

int main()
{
	int n,r;
	cin>>n>>r;
	
	for(int i=1;i<=n;i++)
		cin>>t[i];
	
	sort(t+1,t+n+1); //从小到大排序 
	
	int j = 1;
	int sum = 0;
	for(int i=1;i<=n;i++)
	{
		if(j==r+1)  //前r个人为一组,第r+1个人回到第一个水龙头 
			j = 1;
		s[j] += t[i];  //加上等待时间 
		sum += s[j]; 
		j++;
	}
	cout<<sum<<endl;
		
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_42815188/article/details/88218762