#include<bits/stdc++.h>
using namespace std;
long long n,dp[2001][2001]={0},ans=0,l,b,s[10001]={0},cnt=0;
struct cow{
int x,w,f,c,e;
}a[200001];
bool cmp(cow a,cow b){
return a.e<b.e;
}
int main(){
//freopen("FoxAndGame.in","r",stdin);
//freopen("FoxAndGame.out","w",stdout);
cin>>l>>n>>b;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].w>>a[i].f>>a[i].c;
a[i].e=a[i].x+a[i].w;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)s[a[i].e]=i;//这里是一个优化,s[i]表示排序后最后一个终点为i的铁轨的编号
//for(int i=1;i<=l;i++)cout<<s[i]<<" ";
for(int i=0;i<=b;i++){
for(int j=0;j<=l;j++){
for(int k=s[j];k>=1;k--){
if(a[k].e!=a[s[j]].e)break;
if(i>=a[k].c&&j>=a[k].w)dp[i][j]=max(dp[i][j],a[k].f+dp[i-a[k].c][j-a[k].w]);
//cnt+=1;
}
}
}
for(int i=1;i<=b;i++)ans=max(ans,dp[i][l]);
cout<<ans<<endl;
return 0;
}
莫名30分,求助求助,第1 3 5对了