• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
清瑜
博客园    首页    新随笔    联系   管理    订阅  订阅

算法第四章作业

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.
问题:贪心算法本身不难,但分析问题有难度,一个问题能否用贪心算法解决需要思考并计算。必须满足每个子问题的贪心最优解都是问题的最优解才行。
结对情况:我和家煜同学在本章学习中表现优异,无论是作业还是课堂实验,我们都很快的做出来,并且互相都能理解,希望在接下来的学习中我们都能保持这样的状态。
posted on 2020-11-15 11:06  清瑜  阅读(125)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3