所谓贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。
#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;
}