zoukankan      html  css  js  c++  java
  • HUT2602 01背包 记录路径

    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    using namespace std;
    
    int p[1005], w[1005], dp[1005][1005], N, V;
    
    void DP()
    {
        memset(dp, 0, sizeof (dp));
        for (int i = 1; i <= N; ++i) {
            for (int j = V; j >= 0; --j) { 
                if (j >= w[i] && dp[i-1][j-w[i]] + p[i] > dp[i-1][j]) {
                    dp[i][j] = dp[i-1][j-w[i]] + p[i];
                }
                else {
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        printf("%d\n", dp[N][V]);
        int T = V;
        for (int i = N; i >= 0; --i) {
            for (int j = T; j >= 0; --j) {
                if (dp[i][j] == dp[i-1][j]) {
                    printf("没有选择该物品!\n");
                    break;
                }
                else if (dp[i][j] == dp[i][j-w[i]]+p[i]) {
                    printf("选取了第%d号物品\n", i);
                    T -= w[i];
                    break;
                }
            }
        }
    }
    
    int main()
    {
        int T;
        scanf("%d", &T);
        while (T--) {
            scanf("%d", &N);
            scanf("%d", &V);
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &p[i]);
            }
            for (int i = 1; i <= N; ++i) {
                scanf("%d", &w[i]);
            }
            DP();
        }
        return 0;    
    }
    /*
    5 10
    5 5 2 2 5
    3 1 6 7 3
    */
  • 相关阅读:
    pycharm初始配置
    个人Python笔记
    Linux硬盘分区
    Linux基础(三)
    Linux基础(二)
    linux基础之基本命令
    计算机网络基础
    计算机操作系统
    计算机基础
    vim编辑器
  • 原文地址:https://www.cnblogs.com/Lyush/p/2565627.html
Copyright © 2011-2022 走看看