c_cpp //背包问题的变种

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp //背包问题的变种相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>
using namespace std;
#define MIN  -100001
int maxweight(int w,int n,int val[],int wt[]){
	int dp[w+1];
	for(int i = 1;i <= w;i++){
		dp[i] = MIN;
	}
	dp[0] = 0;
	for(int z = 1;z <= w;z++){
		for(int j = 0;j < n;j++){
			if(wt[j] <= z && dp[z - wt[j]] != MIN){
				dp[z] = max(dp[z],val[j] + dp[z - wt[j]]);
			}
		}
	}
	for(int z = w;z >= 0;z--){
	     if(dp[z] != MIN){
	     	return z;
	     }
	}
return 0;	
}
int main() {
	int w;
	cin >> w;
	int n;
	cin >> n;
	int val[n];
	int wt[n];
	for(int i = 0;i < n;i++){
		cin >> val[i];
	}
	for(int i = 0;i < n;i++){
		cin >> wt[i];
	}
    cout << maxweight(w,n,val,wt) << endl;
	return 0;
}

以上是关于c_cpp //背包问题的变种的主要内容,如果未能解决你的问题,请参考以下文章

poj 1837 天平问题(01背包变种)

HDU3466(01背包变种)

01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法

01背包(变种)

[计数dp] 整数划分(模板题+计数dp+完全背包变种题)

简单的烦恼 难度: 一般 / 知识点: 变种的01背包