听说灌水区大佬多
  • 板块灌水区
  • 楼主20110915_260
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/8/8 10:16
  • 上次更新2024/8/8 11:07:46
查看原帖
听说灌水区大佬多
961241
20110915_260楼主2024/8/8 10:16

站外题求助

题目描述

数轴上有 nn 条线段,线段的两端都是整数坐标(0(0~1000000)1000000),每条线段的价值不同。

请从nn条线段中挑选出若干条,使得这些线段互不重叠(端点可以重叠),并且这些线段总价值最大。

输入格式

第一行一个整数nn

之后的nn行,每行3个整数分别代表线段左端点、线段右端点、线段价值

输出格式

符合题目要求的最大总价值

样例数据

样例输入1

3
0 2 20
2 4 25
1 3 40

样例输出1

45

数据范围

对于30%的数据,1≤n≤201\le n \le 20,左右端点不超过10001000

对于100%的数据,1≤n≤10001\le n \le 1000,左右端点不超过10000001000000

我的代码 18pts

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
struct ckl{
	int l;
	int r;
	int m;
}a[1005];
int cmp(ckl a,ckl b){
	return a.l<b.l;
}
int n,maxn;
int dp[1005];
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].m);
	sort(a+1,a+n+1,cmp);
    dp[1]=a[1];
	for(int i=1;i<=n;i++){
		for(int j=1;j<i;j++){
			if(a[j].r<=a[i].l){
				dp[i]=max(dp[j],a[i].m+dp[j]);
			}
		}
		if(dp[i]>maxn)
			maxn=dp[i];
	}
	printf("%d",maxn);
	return 0;
}

救救孩子吧!!!

2024/8/8 10:16
加载中...