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的时候只是一些基本的概念知识自认为没什么难的,直到现在开始学习了算法,就比如说这个贪心算法,其实这个算法的很多例题从一开始是不大明白的,甚至后来连着看了好几遍也看不懂,其实有些算法如果不是太明白的话可以先带入例子看一下程序有些地方到底是干什么用的,这个贪心算法也没有固定的套路反正就是有一个统一的思想从数学上来说就是求极值,但是数学上求极值也就几种方法,但是程序上要想实现还真是困难,在加上还容易出现错误,有时候看看一个简单的生活问题其实用脑子想想就能出来的要是用程序写出来还真是烧脑。
就比如说那个贪心算法计划活动的程序其实画在图上也就是这样罢了。
这些片段参差不齐所以一开始就对他要么左端排序要么右端排序让他整齐起来。
让第一个右端与第二个左端比较如果没有交集就满足条件在从满足的地方作为比较的对象继续往下。这个题的解析也就这些了。
Acm学习总结(4)
最新推荐文章于 2023-11-18 20:06:00 发布