#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int dp[1000][1000];
int path[1000][1000];
int a[100];
int main()
{
int n,sum;
while(~scanf("%d%d",&n,&sum))
{
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]);
memset(dp,0,sizeof(dp));
memset(path,0,sizeof(path));
for(int i = 1;i <= n;i++)
{
for(int j = sum;j >= a[i];j--)
{
if(dp[i][j] < dp[i-1][j-a[i]] + a[i])
{
path[i][j] = 1;
dp[i][j] = dp[i-1][j-a[i]] + a[i];
// cout<<i<<" "<<j<<endl;
}
}
}
int j = sum;
for(int i = n;i >=1;i--)
{
if(path[i][j] == 1&&j>=0)
{
printf("%d ",a[i]);
j-=a[i];
}
}
}
}
01背包之打印路径
最新推荐文章于 2022-02-26 21:45:26 发布