• 洛谷P1049装箱问题(01背包)


    题目描述

    有一个箱子容量为VVV(正整数,0≤V≤200000 le V le 200000V20000),同时有nnn个物品(0<n≤300<n le 300<n30,每个物品有一个体积(正整数)。

    要求nnn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。

    输入格式

    111个整数,表示箱子容量

    111个整数,表示有nnn个物品

    接下来nnn行,分别表示这nnn个物品的各自体积

    输出格式

    111个整数,表示箱子剩余空间。

    输入输出样例

    输入 #1 
    24
    6
    8
    3
    12
    7
    9
    7
    
    输出 #1 
    0
    没啥好说的,本质上就是dp求解使得允许条件下背包能装的体积最大。注意最后要用v减去dp[v]得到剩余空间。
    #include <bits/stdc++.h>
    using namespace std;
    int v,n;
    int dp[20005]={0};
    int obj[34]={0};
    int main()
    {
        int i,j;
        cin>>v>>n; 
        for(i=1;i<=n;i++)
        {
            scanf("%d",&obj[i]);
        }
        for(i=1;i<=n;i++)
        {
            for(j=v;j>=obj[i];j--)
            {
                dp[j]=max(dp[j],dp[j-obj[i]]+obj[i]);
            }
        }
        cout<<v-dp[v];
        return 0;
    }
  • 相关阅读:
    java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
    第五次作业
    实验四,实验五
    Java_实验二
  • 原文地址:https://www.cnblogs.com/lipoicyclic/p/12343556.html
Copyright © 2020-2023  润新知