种树

似乎又想到3紫1黑


其实是两道不相关的题目,区间选点问题,给了我们O(N2)的复杂度,那就很好确定了,我们可以考虑尽量让一棵树发挥最大价值,放在尾部,直到满足要求为止。

具体实现

  1. 用右端点递增排序
  2. 将不够的树补在尾部
  3. 直到补满

Code

复制代码
#include<bits/stdc++.h>
using namespace std;
int b[30005],h,ans,n; 
struct node{int s,t,f;}a[5001];
bool cmp(node a,node b){return a.t<b.t;}
int main(){
    scanf("%d%d",&h,&n);
    for(int i=1;i<=n;i++)
     scanf("%d %d %d",&a[i].s,&a[i].t,&a[i].f);//输入
    sort(a+1,a+n+1,cmp);//按照右端点排序
    for(int i=1;i<=n;i++){
        int sum=0;
        for(int j=a[i].s;j<=a[i].t;++j)sum+=b[j];//算出已经种了多少树
        if(sum>=a[i].f)continue;//如果超过需求就跳过
        sum=a[i].f-sum;//剩余量
        for(int j=a[i].t;j>=a[i].s,sum;--j,--sum){//种在尾部
         while(b[j])--j;b[j]=1;++ans;//种了一棵树
        } 
    }
    cout<<ans<<endl;
}
复制代码

 

posted @ 2019-10-02 11:32  Coder_cjh  阅读(191)  评论(0)    收藏  举报
编辑推荐:
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
阅读排行:
· 35+程序员的转型之路:经济寒冬中的希望与策略
· 使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
· 一款开源免费、通用的 WPF 主题控件包
· .NET 9 + React 开发的企业级后台权限管理系统,文档齐全,轻松上手
· 神解释:为什么程序员怕改需求?
点击右上角即可分享
微信分享提示