【题目描述】一条街道的一边有几座房子。因为环保原因居民想要在路边种些树,路边的地区被分割成n块,并被编号为1~n。每块大小为一个单位尺寸且最多可总一棵树。每个居民想在门前种些树并制定了三个数b,e,t,这三个数代表居民想在b和e之间最少种t棵树,当然b<=e,t<=e-b+1,允许居民想种树的子区域可以交叉,由于资金短缺的原因,环保部门想请你求出能够满足所有居民的种树要求的书的最少数量。
【输入格式】 第一行为n,表示区域的个数,第二行为m,表示房子的数目,接下来m行描述居民的需要
(0<b<=e<=30000,t<=e-b+1)
【输出格式】输出一个数,表示满足居民的要求所需要种树的最小数量
贪心策略:将房子按结束坐标进行排序后,从前往后尽可能地将树栽到每个区间的末尾,尽可能让后面的房子共用
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n,m,k,ans;
struct node
{int b,e,t;
}a[5005];
bool used[30005];bool cmp(const node& a,const node& b)
{return a.e<b.e;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=0;i<m;i++){cin>>a[i].b>>a[i].e>>a[i].t;}sort(a,a+m,cmp);memset(used,0,sizeof(used));ans=0;for(int i=0;i<m;i++){k=0;for(int j=a[i].b;j<=a[i].e;j++){if(used[j]) k++;}if(k>=a[i].t)continue;k=a[i].t-k;for(int j=a[i].e;j>=a[i].b;j--){if(used[j]==false){used[j]=true;ans++;k--;}if(k==0)break;}}cout<<ans;return 0;
}

同理按照房子的起始位置开始排序也是可以的
代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int n,m,k,ans;
struct node
{int b,e,t;
}a[5005];
bool used[30005];bool cmp(const node& a,const node& b)
{return a.b<b.b;
}int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m;for(int i=0;i<m;i++){cin>>a[i].b>>a[i].e>>a[i].t;}sort(a,a+m,cmp);memset(used,0,sizeof(used));ans=0;for(int i=m-1;i>=0;i--){k=0;for(int j=a[i].b;j<=a[i].e;j++){if(used[j]) k++;}if(k>=a[i].t)continue;k=a[i].t-k;for(int j=a[i].b;j<=a[i].e;j++){if(used[j]==false){used[j]=true;ans++;k--;}if(k==0)break;}}cout<<ans;return 0;
}

贪心算法-区间选点问题-种树相关推荐

  1. 贪心算法——区间选点问题

    转载:https://blog.csdn.net/xia842655187/article/details/51944763 区间选点的问题大致可以描述为:  给定N个区间[a,b],取尽量少的点,使 ...

  2. 贪心法——区间选点问题

    贪心法--区间选点问题 区间选点问题.数轴上有nn个闭区间[ai,bi][a_i, b_i].取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个). 贪心思想:先按bb从小到大进 ...

  3. 贪心算法—区间调度 电影节(POJ 4151)

    贪心算法--区间选取问题 或是区间调度问题 本文解决一个很经典的贪心算法问题 Interval Scheduling(区间调度问题).给你很多形如[start,end]的闭区间,请你设计一个算法,算出 ...

  4. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  5. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)

    一.贪心算法 定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化. 二.区间调度问题 1. 问题:我们有一组需求{1,2,3 ...

  6. 贪心算法区间调度问题思路代码证明

    1.活动安排问题 问题:有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 解题思路:将活动按照结束时间进行从小到大排序,挑选出结束时间尽量 ...

  7. matlab车辆贪心作业调度,贪心算法-区间调度-Interval Scheduling

    什么是贪心算法呢? 贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高. 比如说一个算法问题使用暴力解法需要指数级时间,如果 ...

  8. NYOJ 287 Radar 贪心之 区间选点

    Radar 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Assume the coasting is an infinite straight line. Land ...

  9. 【48. 贪心(区间选点)】

    区间选点与最大不相交区间数量代码一样 思路 将每个区间按照右端点从小到大进行排序 从前往后枚举区间,end值初始化为无穷小 如果本次区间不能覆盖掉上次区间的右端点, ed < range[i]. ...

最新文章

  1. 模型花费几十万美元,五年之间指导无数项目,才发现负样本用的是null?
  2. hdu1166 敌兵布阵
  3. containerd 与安全沙箱的 Kubernetes 初体验
  4. sap 采购订单中收货容差的取值顺序
  5. Factories Gym - 102222G(2018宁夏邀请赛暨2019银川icpc网络预选赛)
  6. Linux导出history命令到本地
  7. 最新 MySQL数据库安装详解(简洁快速)
  8. android4.0自定义锁屏总结【android锁屏研究一】
  9. OSPF区域内拓扑计算原理与实验
  10. CAD的菜单栏消失,如何再次调出来
  11. word批量修改图片的大小
  12. 推荐三个开源无刷电机驱动的开源网站
  13. 深入解读:从DDIM到Improved Denoising Diffusion Probabilistic Models
  14. Discuz_分类信息_字段管理_区域选择_所有地区
  15. java 6面骰子_掷6面骰子6000次每个点数出现的概率
  16. 归并排序算法代码实现
  17. (codeforces)D. Cloud of Hashtags
  18. IT工程师读新工具论--从亚里士多德到培根随便扯扯
  19. Unity5.x实现简易语音聊天(一) 使用步骤
  20. 【购房必备知识】成都落户政策调研(主要介绍——研究生落户)

热门文章

  1. python学习笔记(python介绍)
  2. xamarin UWP中MessageDialog与ContentDialog的区别
  3. C++中的指针与引用(转)
  4. 如何在 C# 中用 SharpZipLib 进行 ZIP 压缩与解压(转)
  5. IE Firefox通用DOM
  6. FC冒险岛java版_冒险岛单机版
  7. java sql server连接字符串_关于Java:SQL Server的等效jdbc连接字符串
  8. java afconsole_Java ——基础语法
  9. 西安4年java多少时间_西安学习java一般要多久
  10. zabbix安装MySQL失败_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...