【天梯】序列型动态规划-3027 线段覆盖 2

匿名 (未验证) 提交于 2019-12-03 00:22:01

#include<iostream> #include<algorithm> using namespace std; struct light { 	int a; 	int b; 	int w; };  light l[1001];  bool cmp(light x,light y) { 	if(x.b==y.b) 		return( x.a<y.a); 	else 		return(x.b<y.b);  }   int main() { 	int n,t;cin>>n; 	int f[1001]={0},g[1001]={0}; 	for(int i=1;i<=n;i++) 	{ 		cin>>l[i].a>>l[i].b>>l[i].w; 		if(l[i].a>l[i].b){t=l[i].a;l[i].a=l[i].b;l[i].b=t;} 	} 	 	sort(l+1,l+n+1,cmp); 	 	for(int i=1;i<=n;i++) 	{ 		for(int j=1;j<=n;j++) 		{ 			if(l[i].a>=g[j]&&f[i]<f[j]+l[i].w)//用g记录当前选择的线段最右边 			{ 				f[i]=f[j]+l[i].w; 				g[i]=l[i].b; 			} 			else 			{ 				if(f[i]<f[j]){f[i]=f[j];g[i]=g[j];} 			} 		} 	} 	cout<<f[n]; 	return 0; } 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!