Acm学习总结(4)

Acm学习总结(4)
我看了一道关于贪心算法应用的例题
删数问题
关于贪心算法的例题解法
题目描述:给定一个n的长度的数
删掉k个数之后按原顺序排列相互最小的删数方案
string a;        //n位数a
int k;
cin>>a>>k;
//如果k≥n,数字被删完了
If (k >= a.size()) a.erase();
else while(k > 0)
{
  //寻找最近下降点
  int i;
  for (i=0; (i<a.size()-1) && (a[i] <= a[i+1]); ++i);
  a.erase(i, 1);    //删除xi
  k- -;
}
//删除前导数字0
while(a.size() > 1 && a[0] == ‘0’)
  a.erase(0, 1);
cout<<a<<endl;
这个题其实一开始还是不明白的后来多看了几遍渐渐的就清楚了。
Acm学习心得:
刚开始学习stl的时候只是一些基本的概念知识自认为没什么难的,直到现在开始学习了算法,就比如说这个贪心算法,其实这个算法的很多例题从一开始是不大明白的,甚至后来连着看了好几遍也看不懂,其实有些算法如果不是太明白的话可以先带入例子看一下程序有些地方到底是干什么用的,这个贪心算法也没有固定的套路反正就是有一个统一的思想从数学上来说就是求极值,但是数学上求极值也就几种方法,但是程序上要想实现还真是困难,在加上还容易出现错误,有时候看看一个简单的生活问题其实用脑子想想就能出来的要是用程序写出来还真是烧脑。
就比如说那个贪心算法计划活动的程序其实画在图上也就是这样罢了。
在这里插入图片描述
在这里插入图片描述
这些片段参差不齐所以一开始就对他要么左端排序要么右端排序让他整齐起来。
让第一个右端与第二个左端比较如果没有交集就满足条件在从满足的地方作为比较的对象继续往下。这个题的解析也就这些了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值