90分,求大佬调
查看原帖
90分,求大佬调
1320060
xiangjinhui楼主2024/10/5 12:44
#include<bits/stdc++.h>
using namespace std;
int m,n;// 物品数量和容量 
const int N=4e4;
int f[N];
int w[N],fw[N][3];//价格 
int v[N],fv[N][3];//价值  
int z[N];//是否为主件 

int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		cin>>w[i]>>v[i]>>z[i];
		if(z[i]==0){
			v[i]*=w[i];
		}
		else{
			fw[z[i]][0]++;
			fw[z[i]][fw[z[i]][0]]=w[i];
			fv[z[i]][fw[z[i]][0]]=w[i]*v[i];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=n;j>=w[i];j--){
			f[j]=max(f[j-w[i]]+v[i],f[j]);//只要主件 
			if(j>=w[i]+fw[i][1]){//主件和附件1 
				f[j]=max(f[j-w[i]-fw[i][1]]+v[i]+fv[i][1],f[j]); 
			}
			if(j>=w[i]+fw[i][2]){//主件和附件2
				f[j]=max(f[j-w[i]-fw[i][2]]+v[i]+fv[i][2],f[j]);
			}
			if(j>=w[i]+fw[i][1]+fw[i][2]){//主件和附件1,2 
				f[j]=max(f[j-w[i]-fw[i][1]-fw[i][2]]+v[i]+fv[i][1]+fv[i][2],f[j]);
			}
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		ans=max(ans,f[i]);
	}
	cout<<f[n];
	return 0;
}
2024/10/5 12:44
加载中...