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背包