→题目链接←
dp[i][j]表示铁轨长度为i,花费为j时有趣指数最大值
代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
#include<cstring>
#define inf 999999999
#define ll long long
using namespace std;
struct node{
int s,e,w,c;
}a[10010];
int n,l,b;
ll dp[1010][1010];
bool cmp(node x,node y){
if(x.s==y.s)return x.e<y.e;
return x.s<y.s;
}
int main(){
scanf("%d%d%d",&l,&n,&b);
for(int i=1; i<=n; i++){
scanf("%d%d%d%d",&a[i].s,&a[i].e,&a[i].w,&a[i].c);
a[i].e=a[i].s+a[i].e;
}
sort(a+1,a+1+n,cmp);
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for(int i=1; i<=n; i++){
for(int j=b; j>=a[i].c; j--){
if(dp[a[i].s][j-a[i].c]!=-1 && dp[a[i].e][j]<dp[a[i].s][j-a[i].c]+a[i].w){
dp[a[i].e][j]=dp[a[i].s][j-a[i].c]+a[i].w;
}
}
}
ll ans=-1;
for(int i=1; i<=b; i++){
ans=max(ans,dp[l][i]);
}
printf("%d\n",ans);
return 0;
}