社区讨论
听说灌水区大佬多
灌水区参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lzknge0l
- 此快照首次捕获于
- 2024/08/08 10:19 2 年前
- 此快照最后确认于
- 2024/08/08 11:07 2 年前
站外题求助
题目描述
数轴上有 条线段,线段的两端都是整数坐标~,每条线段的价值不同。
请从条线段中挑选出若干条,使得这些线段互不重叠(端点可以重叠),并且这些线段总价值最大。
输入格式
第一行一个整数
之后的行,每行3个整数分别代表线段左端点、线段右端点、线段价值
输出格式
符合题目要求的最大总价值
样例数据
样例输入1
3
0 2 20
2 4 25
1 3 40
0 2 20
2 4 25
1 3 40
样例输出1
45
数据范围
对于30%的数据,,左右端点不超过
对于100%的数据,,左右端点不超过
我的代码 18pts
CPP#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;
}
救救孩子吧!!!
回复
共 5 条回复,欢迎继续交流。
正在加载回复...