90分,#7WA掉,求助玄关
查看原帖
90分,#7WA掉,求助玄关
943076
Savior_Destroyer楼主2024/8/4 16:55
#include<bits/stdc++.h>
using namespace std;
int n,ti,f[40005],tot[40005],num;
struct s{
	int x,y,t,v;
	double k;
}arr[20005];
bool cmp(s s1,s s2){
	if(s1.k==s2.k) return s1.x<s2.x;
	return s1.k<s2.k;
}	
int main(){
   cin>>n>>ti;
   for(int i=1;i<=n;i++){
   	cin>>arr[i].x>>arr[i].y>>arr[i].t>>arr[i].v;
   	arr[i].k=(double)(arr[i].y)/(double)(arr[i].x);
   }       
   sort(arr+1,arr+n+1,cmp);
   for(int i=1;i<=n;i++){
   	if(arr[i].k!=arr[i-1].k) tot[++num]=i;
   }
//   for(int i=1;i<=num;i++) cout<<tot[i]<<" ";
      for(int i=1;i<=n;i++){
   	for(int j=ti;j>=arr[i].t;j--){
   		int id,sum=0;
	   	for(int k=1;k<=num;k++){
		   	if((tot[k]<i&&tot[k+1]>i)||tot[k]==i){
			   	id=tot[k];
			   	break;
			   }
		   }
		for(int k=id;k<=i;k++){
			sum+=arr[k].t;
			if(j-sum>=0){
				f[j]=max(f[j],f[j-sum]+arr[k].v);
			} 
		}
	   }
   }
  cout<<f[ti];
    return 0;
}
2024/8/4 16:55
加载中...