贪心算法周末总结

这周主要看了看贪心算法,了解其中的中心思想。贪心算法,顾名思义,就是解决问题的过程中要贪心,通过几次的贪心的选择,寻找到最优的的结果。这是一种思想,而非什么函数啥的。贪心算法并不是从整体去找最优解,而是把整体分成一个个小部分,寻找局部的最优解。如果一个问题可以用好几种方法去解决,那贪心算法我们应优先使用。我对贪心算法主要的理解已经在周三的博客上报告了,这几天也没能对贪心算法有更深刻的理解,但解决了几道题,感觉还不错。下面是其中一道。 林赛是个购物狂。每当有打折的时候,你可以买三件,只付两件,她就会完全疯了,觉得有必要把店里所有的东西都买下来。你已经放弃了医治她的这种病,但设法限制它对她钱包的影响。 你已经意识到,提供这些优惠的商店在选择哪些商品是免费的方面是相当挑剔的;它总是最便宜的。例如,当你的朋友带着7件商品来到柜台,花费400、350、300、250、200、150和100美元时,她将不得不支付1500美元。在这种情况下,她得到了250美元的折扣。你意识到如果她去柜台三次,她可能会得到更大的折扣。如果她买的是400、300和250美元的商品,她第一轮就能得到250美元的折扣。下一轮她带来了150美元的商品,没有额外的折扣,但第三轮她拿走了350美元、200美元和100美元的最后一批商品,再打100美元的折扣,总共是350美元。 你的工作是找到林赛能得到的最大折扣。 输入 第一行输入给出了测试场景的数量,1 t Lindsay购买的商品数量,1 n pi Lindsay可以获得的最大折扣,方法是有选择地选择她同时带来的商品。 样例输入 1 6 400 100 200 350 300 250 样例输出 400 #include<iostream> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll a[30000]; int cmp(int a,int b) {     return a>b; } int main() {     int n,x,s=0;     cin>>n;     for(int i=1;i<=n;i++)     {         cin>>x;         for(int i=1;i<=x;i++)         {             cin>>a[i];         }         sort(a+1,a+x+1,cmp);         for(int i=1;i<=x;i++)         {             if(i%3==0) s+=a[i];         }         cout<<s<<endl;         sum=0;     }         return 0; } 这道题其实很简单,也是我解决的第一道贪心的题,写下来留作纪念。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值