您的位置:首页 > 其它

UVA 624 CD(打印路径的01背包)

2016-10-26 21:47 513 查看
Root

 




 


624 - CD

Time limit: 3.000 seconds
类似于搜索中的打印路径,用一个数组标记,,,不好想

#include <iostream>

#include <cstdio>

#include <cstring>

#include <cmath>

#include <algorithm>

using namespace std;

const int N = 1000;

int dp
, visit

, v
;

const int inf = -0x3f3f3f3f;

int main()

{

    int n, m;

    while(scanf("%d", &m)!=EOF)

    {

        scanf("%d", &n);

        for(int i=0;i<n;i++)

        {

            scanf("%d", &v[i]);

        }

        memset(dp,0,sizeof(dp));

        memset(visit,0,sizeof(visit));

        for(int i=n-1;i>=0;i--)

        {

            for(int j=m;j>=v[i];j--)

            {

                if(dp[j]<dp[j-v[i]]+v[i])

                {

                    visit[i][j]=1;

                    dp[j]=dp[j-v[i]]+v[i];

                }

            }

        }

        for(int i=0,j=dp[m];j>0&&i<n;i++)

        {

            if(visit[i][j])

            {

                printf("%d ",v[i]);

                j-=v[i];

            }

        }

        printf("sum:%d\n",dp[m]);

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: