首页 > 其他 > 详细

UVA 624 (0 1背包 + 打印路径)

时间:2015-08-15 16:19:46      阅读:280      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<algorithm>
#define N 1010

using namespace std;

int dp[N], path[N][N], w[N];

int main()
{
    int v, n;
    while(~scanf("%d", &v))
    {
        scanf("%d", &n);
        memset(dp, 0, sizeof(dp));
        memset(path, 0, sizeof(path));
        for(int i = 1 ; i <= n ;i++)
            scanf("%d", &w[i]);
        for(int i = n ; i >= 0 ; i--)
        {
            for(int j = v ; j >= w[i] ; j--)
            {
                if(dp[j] <= dp[j - w[i]] + w[i])
                {
                    dp[j] = dp[j - w[i]] + w[i];
                    path[i][j] = 1;
                }//path记录
            }
        }
        int j = v;
        for(int i = 1 ; i <= n ; i++)
        {
            if(path[i][j])
            {
                printf("%d ", w[i]);
                j -= w[i];
            }
        }//打印路径
        printf("sum:%d\n", dp[v]);
    }
    return 0;
}

 

UVA 624 (0 1背包 + 打印路径)

原文:http://www.cnblogs.com/qq2424260747/p/4732578.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!