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;
    }
    

      

  • 相关阅读:
    hadoop上的C++程序开发
    some phrase for oral english
    python的安装,IDLE基本操作
    of这个变态
    一分钟先生: 程序员面试真经
    Cloud Tool 小探索
    【学习总结】数学-欧拉函数
    第三篇——第二部分——第一文 SQL Server镜像简单介绍
    NYOJ 915 +-字符串
    人类主动探索地外文明(METI)活动正在进行中
  • 原文地址:https://www.cnblogs.com/jxust-Biao/p/13341992.html
Copyright © 2011-2022 走看看