演算法總結-揹包問題
阿新 • • 發佈:2018-12-11
01揹包
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
//01揹包
//dp[v] = max(dp[v],dp[v-w[i]]+c[i])
int main() {
int n = 5,V = 8; //數目,揹包大小
int w[5] = {3,5,1,2,2};//重量
int c[5] = {4,5,2,1,3};//價值
int dp[100];
for(int i = 0;i <= V;i++){
dp[i] = 0;
}
for(int i = 1;i < n;i++){
for(int v = V;v >=w[i];v--){
dp[v] = max(dp[v],dp[v-w[i]]+c[i]);
}
}
int m = 0;
for(int i = 0;i <=V;i++){
m = max(m,dp[i]);
}
printf("%d\n",m);
}
完全揹包問題
01揹包正向列舉