1423 种树
这个题和刚才那个很像
很经典的一个问题
贪心这个东西是一个思路,并不是一个结构
每个房子看作一个点,然后给定几个操作,表示区间l和r
这样我们就能找出几个问题
思路就是说,种的树尽量的少,尽量让一棵树处于多个区间内,这样我们只需要在重叠区间种树就好了,重叠部分一定要排于区间尾部,因此,我们可以按照所有区间的结束位置进行
其实说白了,就是很简单的模拟,贪心其实和模拟差不多
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int n,m;
int ans;
int k;
bool book[30005];
struct node
{
int l,r;
int need;//树的数量
}a[5005];
bool cmp(node a,node b)
{
if(a.r<b.r)
return true;
else
return false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].l>>a[i].r>>a[i].need;
}
sort(a+1,a+1+m,cmp);
ans=0;
for(int i=1;i<=m;i++)
{
k=0;
for(int j=a[i].l;j<=a[i].r;j++)
{
if(book[j]==1)
k++;
}
if(k>=a[i].need)//不需要种树
continue;
for(int j=a[i].r;j>=a[i].l;j--)
{
if(book[j]==0)
{
book[j]=1;
k++;
ans++;
}
if(k==a[i].need)//种够树了
break;
}
}
cout<<ans<<endl;
return 0;
}