01背包之打印路径

来源:互联网 发布:成都网络服务器租用 编辑:程序博客网 时间:2024/06/01 07:11
#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];            }        }    }}

0 0
原创粉丝点击