zoukankan      html  css  js  c++  java
  • 区间选点-贪心-acwing

    1、微扰:任何局部最优的微笑改变都会造成整体结果变差

    2、范围缩放:任何对局部最优策略作用和范围的扩展都不会造成整体结果变差

    3、决策包容性:局部最优策略提供的可能性包含其他所有策略提供的可能性

    4、反证法

    5、数学归纳法

    这道题目要求在数轴选点,使每个区间至少包含一个点,本质上是说,相交的区间选一点即可,不相交区间须选二点,其实也就是找到最大不相交区间数量
    但是以我的理解就是求出的最小区间ans一定小于等于所有符合条件的可能的数量ans<=cnt

    然后又因为在尽可能避免区间不想交的情况下ans>=cnt

    思考:正确解释应该是可以对区间的端点进行排序,之后安排排序后的大小来查看当前需要抉择的区间是否有不想交或者或者已经有点的存在了

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <cmath>
    #include <cstdio>
    #include <stdio.h>
    #include <cstdlib>
    #include <algorithm>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <iomanip>
    #define rep(i,a,b) for(int i = a; i <= b ; i ++ )
    #define pre(i,a,b) for(int i = b ; i >= a ; i --)
    #define ll long long
    #define inf 0x3f3f3f3f
    #define ull unsigned long long
    #define ios ios::sync_with_stdio(false),cin.tie(0)
    using namespace std;
    typedef pair<int,int> PII ;
    const int N=2e6+10,mod=998244353,p=233;
    
    int n;
    struct Range
    {
        int l,r;
        bool operator< (const Range &w) const
        {
            return r<w.r;
        }
    }range[N];
    
    int main()
    {
        ios;
        cin>>n;
        rep(i,0,n-1)
        {
            int l,r;
            cin>>l>>r;
            range[i]={l,r};
        }
        sort(range,range+n);
    
        int res=0,ed=-inf;
        rep(i,0,n-1)
        {
            if(range[i].l>ed)
            {
                res++;
                ed=range[i].r;
            }
        }
        cout<<res<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    成功率最高的发送邮件代码
    更改ReSharper的智能提示
    [转]SQL 2000 Insert返回自动编号id三种方法比较
    得到汉字的拼音首字母
    不能正确显示UltraWebGrid的解决方法.
    [转]asp.net使用json
    [转] 技术是一种加速器 但重要的不是技术
    [原]模仿Google首页的PNG动画效果
    一个通过DataSet操作XML的类
    C# partial 关键字详解
  • 原文地址:https://www.cnblogs.com/jxust-Biao/p/13341992.html
Copyright © 2011-2022 走看看