#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;
}
uva62401背包打印路径
猜你喜欢
转载自blog.csdn.net/sdauguanweihong/article/details/89053499
今日推荐
周排行