求助求助
查看原帖
求助求助
330026
wmq2006楼主2020/7/13 15:44
#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对了

2020/7/13 15:44
加载中...