确实很少遇到要求输出背包路径的题,今天无聊整理了两种方法:
code:(1)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[10005];
bool path[105][10005];
int c[10005],w[10005];
int main()
{
int N,V;
while (cin>>V>>N)
{
memset(path,0,sizeof(path));
memset(dp,0,sizeof(dp));
for (int i = 1;i <= N;++i) cin>>c[i]>>w[i];
for (int i = N;i >= 1;--i)
{
for (int j = V;j >= c[i];--j)
{
if (dp[j] < dp[j-c[i]]+w[i])
{
dp[j] = dp[j-c[i]]+w[i];
path[i][j] = 1;
}
}
}
cout<<dp[V]<<endl;
puts("-----------------------------------------");