uva62401背包打印路径

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define maxn 30
#define maxm 10005
using namespace std;
int n,m;
int w[maxn];
int f[maxm];
int vis[maxn][maxm];
int main()
{

    while(~scanf("%d",&m))
    {scanf("%d",&n);
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;i++)
    scanf("%d",&w[i]);
    memset(f,0,sizeof(f));
for(int i=1;i<=n;i++)
{
    for(int v=m;v>=w[i];v--)
        if(f[v]<f[v-w[i]]+w[i])
        {vis[i][v]=1;
            f[v]=f[v-w[i]]+w[i];
}
}
for(int i=n,j=m;i>=0;i--)
{
    if(vis[i][j])
    {
        printf("%d ",w[i]);
        j-=w[i];
    }
}
printf("sum:%d\n",f[m]);
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/sdauguanweihong/article/details/89053499