标签:cin highlight for EDA pac hellip 题目 个数 指定
9
4
1 4 2
4 6 2
8 9 2
3 5 2
5
#include<bits/stdc++.h>
using namespace std;
struct X{//结构体
int b,e,t;
}a[5005];
bool cmp(X x,X y)//这不是问题的关键
{
if(x.e!=y.e) return x.e<y.e;
return x.b>y.b;
}
bool xyds[30005];
int main()
{
int n,h;
cin>>n>>h;
for(int i=1;i<=h;i++) cin>>a[i].b>>a[i].e>>a[i].t;
sort(a,a+h+1,cmp);//结构体排序
int ans=0;
for(int i=1;i<=h;i++)
{
int B=a[i].b,E=a[i].e,T=a[i].t;
for(int j=B;j<=E;j++)
{
if(xyds[j]) T--;//扣除已种的树
}
if(T>0)
{
for(int j=E;j>=B;j--)
{
if(!xyds[j]) T--,xyds[j]=1,ans++;//在右端种树
if(!T) break;
}
}
}
cout<<ans;
return 0;
}
贪心即可解决(俺不会差分约束555)。结构体sort排序即可解决(这不是问题的关键)。思路:首先按照区间的结束位置(b)从小到大排序,若结束位置相同,则按照起始位置(e)从大到小排序(可用sort解决);然后就优先在区间的尾部种树,数量为总数(t)减去已种数量。另外需要用bool数组标记已种树的位置,防止重复种树。最终输出ans即可。
标签:cin highlight for EDA pac hellip 题目 个数 指定
原文地址:https://www.cnblogs.com/dong-ji-yuan/p/11155866.html