zoukankan      html  css  js  c++  java
  • 算法训练 装箱问题

    问题描述
      有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
      要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
    输入格式
      第一行为一个整数,表示箱子容量;
      第二行为一个整数,表示有n个物品;
      接下来n行,每行一个整数表示这n个物品的各自体积。
    输出格式
      一个整数,表示箱子剩余空间。
      样例输入
      24
      6
      8
      3
      12
      7
      9
      7
    样例输出
    0
    思路:类似于0-1背包,得:dp[v1] = max{dp[v1],dp[v1-v[i]]+v[i]}//第i个物品未被选上或被选上

    其中dp[v1]表示容量为v1的箱子能够获得的最大物品体积(价值)
    用V-dp[V]即是最终答案
    同时,用滚动数组可省去定义v[n]的空间

    #include <stdio.h>
    int dp[20001];
    int GetMax(int a ,int b)
    {
        return a > b ? a : b;
    }
    int main()
    {
        int V,n,i,t,v;
        scanf("%d%d",&V,&n);
        for(t=0;t<n;t++)
        {
            scanf("%d",&v);
            for(i=V;i>=v;i--)//从后往前递推
                dp[i] = GetMax(dp[i],dp[i-v]+v);
        }
        printf("%d
    ",V-dp[V]);
        return 0;
    }
  • 相关阅读:
    3-2 表的增删改查
    3-1 存储引擎的介绍
    2-1 库的增删改查
    1-4 初识sql语句
    1-3 mysql的安装和基本管理
    1-2 数据库概述
    1-1 数据库管理软件的由来
    4-6 IO模型对比
    《测试软件工程师》11,13 测试用例格式
    《软件测试工程师》10 测试环境搭建
  • 原文地址:https://www.cnblogs.com/emptyCoder/p/5149534.html
Copyright © 2011-2022 走看看