算法第四章作业
1.你对贪心算法的理解
贪心算法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。{看着这个名字,贪心,贪婪这两字的内在含义最为关键。这就好像一个贪婪的人,他事事都想要眼前看到最好的那个,看不到长远的东西,也不为最终的结果和将来着想,贪图眼前局部的利益最大化,有点走一步看一步的感觉。}该算法有一定的局限性,并不适用于所有问题。
2.
7-3 排队接水 (15分)
有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
输入格式:
共两行,第一行为n(1≤n≤1000);第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。
输出格式:
输出为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
输入样例:
10
56 12 1 99 1000 234 33 55 99 812
输出样例:
291.90
思路:每一次打水都会增加剩下的等待人的等待接水时间,不难想到只要让接水时间少的人先接,那么所有人的总等待时间就会最小。得出算法如下
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
double a[1000];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);
double waitingTime=0;
for(int i=0;i<n;i++)
waitingTime = waitingTime + (n-i-1)*a[i];
cout<<setiosflags(ios::fixed)<<setprecision(2)<<waitingTime/n<<endl;
return 0;
}
芜湖~,起飞!
3.
问题:贪心算法本身不难,但分析问题有难度,一个问题能否用贪心算法解决需要思考并计算。必须满足每个子问题的贪心最优解都是问题的最优解才行。
结对情况:我和家煜同学在本章学习中表现优异,无论是作业还是课堂实验,我们都很快的做出来,并且互相都能理解,希望在接下来的学习中我们都能保持这样的状态。
浙公网安备 33010602011771号