zoukankan      html  css  js  c++  java
  • 几类贪心基本例题

    贪心都是按照一定规则处理问题的。至于这个规则的证明一般有两种办法:归纳法和反证法。。我会第二种的一部分,找反例。一般来说都没人去肝贪心问题的证明。太长了也太难了。。大概正确的话基本都是正确的。凭直觉??(不能贪那肯定是DP了)(贪了很久还是WA,那么十有八九是DP)

    1.硬币问题
    给定若干种面额的硬币,每种数量不同。求怎么用来支付n元使得硬币数最少。(1,5,10,50,100)
    这个显然可以贪心,因为大硬币可以用小硬币表示(不互质)(类似进制分解,二进制2能表示64 16 32 128..)

    for(int i = n; i; --i) { //Ó²±ÒÖÖÀà
       int t = min(A / v[i], c[i]);
       A -= t * v[i];
       ans += t;
    }
    

    若是硬币的面额是任意的,那么这就是个背包了。是个DP。详见看我的题解POJ1742.

    2.区间问题

    给定n个区间,求选取两两不相交区间.
    我们不妨给定几个贪心方法
    1.在可选的区间,每次都选开始左端点的。
    2.在可选的区间,每次都选右端点最小的。
    3.在可选的区间,每次都选长度最短的。
    4.在可选区间,每次都选取与最少与可选区间重叠最小的区间。

    1的反例

    1111111111111111111111111
      222222 3333333
    

    3的反例

    11111111111 22222222222
           3333333
    

    4反例

      111     111
      111     111
      111 111 111
    111 111 111 111
    

    所以按照右端点排序是对的咯。

    sort(p + 1, p + 1 + n);
    	int now = 0, ans(0);
    
    	rep(i, 1, n) {
    		if(p[i].l >= now) {
    			now = p[i].r;
    			ans++;
    		}
    	}
    

    3.字典序最小

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15126944.html

  • 相关阅读:
    自定义控件-控件关联
    DELPHI INSERT INTO 语句的语法错误 解决方法
    Delphi控件开发
    Delphi控件复合控件
    vcl学习备忘网址
    Delphi单元文件Unit详解
    aowner , nil 和 self 的区别
    Delphi 自定义事件的例子
    PHP中Heredoc
    What is HTTP_USER_AGENT?
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15126944.html
Copyright © 2011-2022 走看看