100分Subtask1WA求调
查看原帖
100分Subtask1WA求调
1366699
programmer330楼主2024/10/23 10:13
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define N 105
vector<int>v[65],w[65];
vector<int>v1[65],w1[65];
int f[320005];
void dfs(int i,int j,int price,int val){
	if(j==v[i].size()){
		v1[i].push_back(price+v[i][0]);
		w1[i].push_back(val+v[i][0]*w[i][0]);
		return;
	}
	dfs(i,j+1,price,val);
	dfs(i,j+1,price+v[i][j],val+v[i][j]*w[i][j]);
}
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int price,p,q;
		cin>>price>>p>>q;
		if(q==0){
			v[i].push_back(price);
			w[i].push_back(p);
		}else{
			v[q].push_back(price);
			w[q].push_back(p);
		}
	}
	for(int i=1;i<=m;i++){
		if(v[i].size()==0)continue;
		else dfs(i,1,0,0);
	}
	memset(f,0xcf,sizeof(f));
	f[0]=0;
	for(int i=1;i<=m;i++){
		if(v[i].size()==0)continue;
		for(int j=n;j>=0;j--){
			for(int k=0;k<v1[i].size();k++){
				if(j>=v1[i][k]){
					f[j]=max(f[j],f[j-v1[i][k]]+w1[i][k]);
				}
			}
		}
	}
	int ans=0;
	for(int j=0;j<=n;j++)ans=max(ans,f[j]);
	cout<<ans<<endl;

	

	return 0;
}
2024/10/23 10:13
加载中...