P1133 装箱问题0

来源:互联网 发布:寅时三刻网络 编辑:程序博客网 时间:2024/05/17 16:14

描述

有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。

格式

输入格式

第一行,一个整数,表示箱子容量;
第二行,一个整数,表示有n个物品;
接下来n行,分别表示这n个物品的各自体积。

输出格式

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

样例1

样例输入1

24
6
8
3
12
7
9
7

样例输出

0

--————————————————————分割线———————————————————————————————————————

n个物品,v的容量,典型的背包DP嘛,BUT,最小剩下空间,改下就好了嘛~~
具体看代码:
#include <iostream>using namespace std;int j,f[1000001],n,v,ans;int main(){scanf("%d%d",&v,&n);   //读入容量和物品数量ans=v;f[v]=true;    //把答案设定为当前最小空间,f[v]表示未拿走的物品for(i=1;i<=n;i++)   //一个个读入物品重量{    int x;      scanf("%d",&x);     for(j=x;j<=v;j++)   //DP过程     if(f[j]){      f[j-x]=true;ans=min(j-x,ans);} //首先设定其已被拿走,然后比较目前最小空间和答案,取小者}printf("%d",ans);return 0;}



0 0