zoukankan      html  css  js  c++  java
  • 种树

    贪心

    按照右端点排序,每一段都从后开始填,因为这样就填到了公用的部分,如果这样就满足了后一段,后一段计算时直接cotinue,否则再从后开始填

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=30007;
    const int maxh=5007;
    bool vis[maxn];
    int n,h,k,ans;
    struct Hos{
        int s,t,val;
    }hos[maxn];
    bool cmp(Hos a,Hos b){
        return a.t<b.t;
    }
    int main(){
        cin>>n>>h;
        for(int i=1;i<=h;i++){
            cin>>hos[i].s>>hos[i].t>>hos[i].val;
        }
        sort(hos+1,hos+h+1,cmp);
        for(int i=1;i<=h;i++){
            k=0;
            for(int j=hos[i].s;j<=hos[i].t;j++)
                if(vis[j]) k++;
            if(k>=hos[i].val) continue;
            for(int j=hos[i].t;j>=hos[i].s;j--){
                if(!vis[j]){
                    vis[j]=true;
                    k++;ans++;
                    if(k==hos[i].val) break; 
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    } 
  • 相关阅读:
    bootstrap初识
    司徒正美居中方式
    css中的浮动(float)
    fio
    简易接口测试脚本
    字符加密
    Python 汉诺塔
    Python 找零问题
    Python 二分法
    Python 冒泡排序
  • 原文地址:https://www.cnblogs.com/lcan/p/9581181.html
Copyright © 2011-2022 走看看