本文主要是介绍2001NOIP普及组真题 4. 装箱问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
线上OJ:
【01NOIP普及组】装箱问题
核心思想:
step1、要求箱子的剩余空间为最小,即要求 箱子内体积最大
step2、本题没有提到价值w,但我们可将每个物品的体积 v 等价于每个物品的价值w。
step3、所以箱内物品的体积和最大,即为箱内物品的总价值最大。
此时直接套用01背包模板代码即可
题解代码:
#include <bits/stdc++.h>using namespace std;const int N = 20010;int m, n;
int f[N];int main()
{scanf("%d%d", &m, &n);for (int i = 0; i < n; i ++ ){int v;scanf("%d", &v);for (int j = m; j >= v; j -- ) f[j] = max(f[j], f[j - v] + v);}printf("%d\n", m - f[m]);return 0;
}
这篇关于2001NOIP普及组真题 4. 装箱问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!