2025年05月01日 星期四 农历 乙巳年(蛇)四月初四

信息学奥赛常考算法——贪心法

发布人:钱翠萍    发布时间:2012-06-15 点击量:9813

贪心法

贪心法是从问题的某一个初始解出发,向给定的目标图推进。但它与普通递推求解过程不同的是,其推进的每一步不是依据某一固定的递推式,而是做一个当时看似最佳的贪心选择,不断地将问题实例归纳为更小的相似的子问题,并期望通过所做的局部最优选择产生出一个全局最优解。

    一般的贪心法解决问题的效率是很高的,应用也很广泛,例如哈夫曼编码、图的最小生成树算法等,考虑用贪心法解决问题之前首先要证明该问题的局部最优能够带来整体最优,即判定该问题能否用贪心法解决。

典型例题:

【例题】删数问题。从键盘输入一个高精度的正整数n(小于240位),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对于给定的ns,寻找一种方案,使得剩下的数字组成的新数最小。

输入:ns

输出:最后剩下的最小数。

样例输入:178543    4

样例输出:13

program shanshu

var  i,j,k,s:integer;n:string;

begin

    readln(n);

    readln(s);

    while s>0 do

    begin

        i:=1;

        while (i]]

            inc(i);

        delete(n,i,1);          {删除一个字符串的字符}

        dec(s);                     {x:=x-1}

    end;

    while (length(n)>1) and (n[1]=‘0’) do

        delete(n,1,1);        {删除结果字符串高位的”0”}

    write(n,1,1);  

end.