luoguP1049 装箱问题

一、题目内容

【题目描述】

有一个箱子容量为V(正整数,0 ≤ V ≤ 20000),同时有n个物品 0<n≤30,每个物品有一个体积(正整数)。

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

【输入格式】

1个整数,表示箱子容量

1个整数,表示有n个物品

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

【输出格式】

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

【输入样例】

24
6
8
3
12
7
9
7

【输出样例】

0

【说明】

NOIp2001普及组 第4题

【测试网站】

luoguP1049

二、题目分析

01背包模板题目,体积作为限制条件,等同于背包问题的体积,体积也同时作为价值衡量,然后利用套用01背包模板解题,最后答案为剩余空间为箱子体积V - dp[V]。

三、代码示例

#include <bits/stdc++.h>

using namespace std;
const int maxc = 20000 + 10;
const int maxn = 30 + 10;

int v[maxn];
int dp[maxc] = {0};

int main()
{
  int V,n;
  scanf("%d%d",&V,&n);
  for(int i = 1; i <= n; i++) scanf("%d",&v[i]);
  for(int i = 1; i <= n; i++)
    for(int j = V; j >= v[i]; j--)
      dp[j] = max(dp[j],dp[j-v[i]] + v[i]);
  printf("%d\n",V-dp[V]);
  return 0;
}

 上一篇
luoguP1616 疯狂的采药 luoguP1616 疯狂的采药
一、题目内容【题目描述】 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,
2019-02-04
下一篇 
luoguP1048 采药 luoguP1048 采药
一、题目内容【题目描述】 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,
2019-02-04
  目录