这道题很像紫书上P233,区间选点的问题。由于小区间被满足大区间一定被满足,所以在区间包含问题上,大区间不需要考虑。n个闭区间【ai,bi】,把所有区间按照从小到大排列(b相同时,a从小到大排列)。而且此处贪心策列:取最后一个点。
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int b,e,t;
}s[30005];
int a[30005];
bool cmp(const node &a,const node &b){
return a.e<b.e;
}
int main (){
int ant=0;
int n,h;
cin>>n;
cin>>h;
for(int i=1;i<=h;i++)
cin>>s[i].b>>s[i].e>>s[i].t;
sort(s+1,s+h+1,cmp);
for(int i=1;i<=h;i++){
int sum=0;
for(int j=s[i].e;j>=s[i].b;j--)
if(a[j]==1)
sum++;
if(sum>=s[i].t)
continue;
else{
for(int j=s[i].e;j>=s[i].b;j--){
if(!a[j]){
a[j]=1;
sum++;
ant++;
}
if(sum==s[i].t)
break;
}
}
}
cout<<ant<<endl;
return 0;
}