zoukankan      html  css  js  c++  java
  • 【动态规划】简单背包问题II

    【动态规划】简单背包问题II

    时间限制: 1 Sec  内存限制: 64 MB

    题目描述

    张琪曼:“为什么背包一定要完全装满呢?尽可能多装不就行了吗?”

    李旭琳:“你说得对,这和墨老师曾告诉我们的‘日中则昃,月满则亏’是一个道理。”所以,现在的问题是,她们有一个背包容量为v(正整数,0≤v≤20000),同时有n个魔法石(0≤n≤30),每个魔法石有一个体积 (正整数)。要求从n个魔法石中,任取若干个装入包内,使背包的剩余空间为最小。

    输入

    第一行为一个整数,表示背包容量,第二行为一个整数,表示有n个魔法石,接下来n行,分别表示这n个魔法石的各自体积。

    输出

    只有一个整数,表示背包剩余空间。

    样例输入

    24     
    6      
    8      
    3
    12
    7
    9
    7
    

    样例输出

    0

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    int m,n,a[33],f[22222];
    void OneZeroPack(int m,int v,int w)  //0-1背包
    {
        for(int i=m;i>=v;i--)
            f[i]=max(f[i],f[i-v]+w);
    }
    
    int main()
    {
        while(cin>>m>>n)
        {
            for(int i=0;i<n;i++)
                cin>>a[i];
            memset(f,0,sizeof(f));
            for(int i=0;i<n;i++)
                OneZeroPack(m,a[i],a[i]);
            cout<<m-f[m]<<endl;
        }
        return 0;
    }
  • 相关阅读:
    14-定时器
    13-JS中的面向对象
    12-关于DOM操作的相关案例
    11-DOM介绍
    10-关于DOM的事件操作
    09-伪数组 arguments
    08-函数
    07-常用内置对象
    06-流程控制
    05-数据类型转换
  • 原文地址:https://www.cnblogs.com/asuml/p/5733817.html
Copyright © 2011-2022 走看看