luoguP2439教室利用(貪心,排序,dp)

題目大意:

讀入所有演講的起始和終止時間;

計算最大的可能演講總時間

我們假設在某一演講結束的瞬間我們就可以立即開始另一個演講。

#include<iostream>
#include<algorithm>
using namespace std;
struct data{
	int x;
	int y;
}a[5010];
int f[5010]={0};
int cmp(data a,data b){
	if (a.x<b.x) return 1;
	if (a.x>b.x) return 0;
	if (a.y<b.y) return 1;
	return 0;
}
int main(){
	int n;
	cin>>n;
	for (int i=1;i<=n;i++) cin>>a[i].x>>a[i].y;
	sort(a+1,a+1+n,cmp);
	f[1]=a[1].y-a[1].x;
	for (int i=2;i<=n;i++){
		for (int j=1;j<i;j++)
		if (a[j].y<=a[i].x) f[i]=max(f[i],f[j]);         //dp
		f[i]+=a[i].y-a[i].x;
}
	int ans=0;
	for (int i=1;i<=n;i++) ans=max(ans,f[i]);
	cout<<ans;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章