小蒟蒻求各位大佬帮忙优化一下多重背包问题QAQ,谢谢!
查看原帖
小蒟蒻求各位大佬帮忙优化一下多重背包问题QAQ,谢谢!
143291
真香警告AQA楼主2020/6/30 17:51

30分代码(开氧优化50)如下,如有大佬愿意指点一二,小生定感激不尽!

#include<bits/stdc++.h> 
using namespace std;
int n,weight,v[100001],w[100001],m,num=0,ans[1000086];

void input(){//输入 
	int i=1;
	cin>>n>>weight;
	while(cin>>w[i]>>v[i]>>m){
		num+=m;
		for(int j=1;j<m;j++){
			i++;
			v[i]=v[i-j];
			w[i]=w[i-j];
		}
		i++;
	}
/*	
	for(int j=0;j<i;j++){
		cout<<v[j]<<" "<<w[j]<<endl;
	}
	
	cout<<num<<endl;
*/
}

void sub(){// 过程 
	for(int i=1;i<=num;i++){
		for(int j=weight;j>=v[i];j--){
			ans[j]=max(ans[j],ans[j-v[i]]+w[i]);
		} 
/*	
		for(int j=1;j<=weight+1;j++){ 
			cout<<ans[j]<<" ";
		}
		cout<<endl;
*/	
	}
	cout<<ans[weight];
}

int main(){
	input();
	sub();
	return 0;
}
2020/6/30 17:51
加载中...