朝题夕解之动态规划(3)

简介: 朝题夕解之动态规划(3)

题目描述(题目难度:简单)

有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。
要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
第一行是一个整数 V,表示箱子容量。
第二行是一个整数 n,表示物品数。
接下来 n 行,每行一个正整数(不超过10000),分别表示这 n 个物品的各自体积。
输出格式
一个整数,表示箱子剩余空间。
数据范围
0<V≤20000,
0<n≤30
输入样例:
24
6
8
3
12
7
9
7
输出样例:
0

解题报告


对于题目中可以解读出,这些物品最多只能用一次,而且,看到最小值三个字,那么可以向01背包的方向靠近,题目中所给的箱子容积就可以理解为背包体积。


参考代码

#include <iostream>
#include <algorithm>
using namespace std;
const int N =20010 , M = 40;//N用于箱子容积,M用于物品个数
int v[N];//每个商品的体积
int f[N];//表示状态的集合
int n,m;//箱子容积和个数
int main()
{
    ios::sync_with_stdio(false);
    cin >> n >> m;
    //录入m个物品的体积
    for(int i = 1; i <= m;i++) cin >> v[i];
    //dp
    for(int i = 1;i <= m;i++)
        for(int j = n;j >= v[i];j--)
        f[j] = max(f[j],f[j-v[i]]+v[i]);
    cout << n - f[n] << endl;
    return 0;
}
相关文章
|
18天前
|
算法 测试技术 C++
|
18天前
|
C++ NoSQL 容器
动态规划二
动态规划二
|
18天前
动态规划1
动态规划1
16 0
动态规划1
|
8月前
|
机器学习/深度学习 算法
动态规划详解
前段时间一直在做关于数据结构的题,也算是对数据结构有了一定的了解,知道了有些数据结构的基本算法。现在刚刚开始接触动态规划,其实写这篇文章的初衷是一来锻炼一下自己的总结能力,二来也是希望通过这篇文章,来指引和我一样的初学者,废话不多说了,开始吧。
36 0
|
12月前
|
定位技术
动态规划题:夺宝奇兵
动态规划题:夺宝奇兵
51 0
|
存储 C语言
|
存储
动态规划最大字段和
动态规划最大字段和
71 0
|
算法 前端开发 JavaScript
理解动态规划
理解动态规划
理解动态规划
|
机器学习/深度学习 算法
朝题夕解之动态规划(6)
朝题夕解之动态规划(6)
134 0
朝题夕解之动态规划(6)