#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void bag(int V,vector<int> &cost,vector<int> &w){
int i,v;
vector<int> dp(V+1,0);
vector<vector<int>> path(10,vector<int>(10));
dp[0]=0;
for( i=1;i<=cost.size();i++){
for( v=V;v>=cost[i-1];v--){
if(dp[v]<dp[v-cost[i-1]]+w[i-1]){
dp[v]=dp[v-cost[i-1]]+w[i-1];
path[i][v]=1;
}
}
}
v=V;
for(i=cost.size();i>=1;i--)
if(path[i][v]){
cout<<cost[i-1]<<endl;
v-=cost[i-1]; //逆序打印路径
}
cout<<dp[V]<<endl; //最大价值
}
int main(){
vector<int> cost={2,4,6,7};
vector<int> w={1,2,7,9};
bag(10,cost,w);
return 0;
}
0-1背包打印路径
最新推荐文章于 2022-02-26 21:45:26 发布