4 条题解
-
0
#include<bits/stdc++.h> #define int long long using namespace std; const int N=5e3+5; const int M=1e5+5; int n,m; struct Node{ int l,r,val; bool operator <(const Node &oth)const { return r<oth.l; } }a[N]; int dp[M]; signed main() { cin>>n>>m; int l,r,val; for(int i=1;i<=n;i++){ cin>>l>>r>>val; a[i].l=l,a[i].r=r,a[i].val=val; } sort(a+1,a+1+n); for(int i=m;i>=1;i--){ dp[i]=max(dp[i],dp[i+1]); for(int j=1;j<=n;j++){ if(a[j].l==i) dp[i]=max(dp[i],dp[a[j].r+1]+a[j].val); } } cout<<dp[1]; }
-
0
n,m=map(int,input().split()) l=[0]*5005 r=[0]*5005 v=[0]*5005 for i in range(n): l[i],r[i],v[i]=map(int,input().split()) for i in range(n): for j in range(n-i): if r[j]>r[j+1]: l[j],l[j+1]=l[j+1],l[j] r[j],r[j+1]=r[j+1],r[j] v[j],v[j+1]=v[j+1],v[j] dp=[0]*100005 i=1 for j in range(m+1): if j>0: dp[j]=dp[j-1] while i<=n and r[i]<=j: dp[r[i]]=max(dp[r[i]],dp[l[i]-1]+v[i]) i+=1 print(dp[m])
-
0
#include<bits/stdc++.h> #define mst(a,b) memset(a,b,sizeof a) template<class T>inline void read(T &x){x=0;char c=getchar();bool f=0;for(;!isdigit(c);c=getchar())if(c=='-')f=1;for(;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0';x=f?(~(x-1)):x;} template<class T>inline void write(T x){if(x<0)return putchar('-'),write(-x),void();if(x>=10)write(x/10);putchar(x%10+'0');return;} template<class T>inline void print(T x){write(x);putchar('\n');} template<typename type,typename ...T>inline void read(type &x,T&...y){read(x),read(y...);} using namespace std; const int N=5e3,M=1e5; int n,m; struct node{ int l,r,v; inline friend bool operator <(node _x,node _y){ return _x.r<_y.r; } }wt[N]; int dp[M]; signed main(){ read(n,m); for(int i=1;i<=n;++i){ read(wt[i].l,wt[i].r,wt[i].v); } sort(wt+1,wt+n+1); mst(dp,0); for(int i=1,j=1;i<=m;++i){ dp[i]=dp[i-1]; for(;j<=n&&wt[j].r<=i;++j){ dp[wt[j].r]=max(dp[wt[j].r],dp[wt[j].l-1]+wt[j].v); } } print(dp[m]); return 0; }
- 1
信息
- ID
- 952
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 85
- 已通过
- 15
- 上传者