90分求助QwQ
查看原帖
90分求助QwQ
590482
HarryLinner楼主2022/10/12 21:35
#include<bits/stdc++.h>

using namespace std;

const int N = 210 , M = 4e4+10 ;

typedef long long ll;

int n,m,sum;
ll f[N][M];
struct node{
	int x,y,t,v;
	double k;
}q[N];
struct edge{
	int tot;
	int sumt[N];
	ll sumv[N];
}t[N];

bool cmp1(node a,node b){
	if(a.k!=b.k){
		return a.k<b.k;
	}
	return abs(a.x)<abs(b.x);
}

int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>q[i].x>>q[i].y>>q[i].t>>q[i].v;
		if(q[i].y!=0){
			q[i].k=(double)q[i].x/(double)q[i].y;
		}
		else{
			q[i].k=1919810;
		}
	}	
	sort(q+1,q+n+1,cmp1);
	double last=-114514;
	for(int i=1;i<=n;i++){
		if(q[i].k!=last){
			last=q[i].k;
			t[++sum].tot=1;
			t[sum].sumt[1]=q[i].t;
			t[sum].sumv[1]=(ll)q[i].v;
		}
		else{
			t[sum].tot++;
			t[sum].sumt[t[sum].tot]=t[sum].sumt[t[sum].tot-1]+q[i].t;
			t[sum].sumv[t[sum].tot]=t[sum].sumv[t[sum].tot-1]+(ll)q[i].v;
		}
	}
	for(int i=1;i<=sum;i++)
		for(int j=1;j<=t[i].tot;j++)
			for(int k=m;k>=t[i].sumt[j];k--){
				f[i][k]=max(f[i][k],f[i-1][k-t[i].sumt[j]]+t[i].sumv[j]);
			}
	ll ans=0;
	for(int i=1;i<=sum;i++){
		ans=max(ans,f[i][m]);
	}
	cout<<ans;
 	return 0;
}

              
              
2022/10/12 21:35
加载中...