1. 程式人生 > >P1049 裝箱問題(01背包)

P1049 裝箱問題(01背包)

esp ora 理解 pri namespace str sam 接下來 AC

題目描述

有一個箱子容量為V(正整數,0<=V<=20000),同時有n個物品(0<n<=30,每個物品有一個體積(正整數)。

要求n個物品中,任取若幹個裝入箱內,使箱子的剩余空間為最小。

輸入輸出格式

輸入格式:

一個整數,表示箱子容量

一個整數,表示有n個物品

接下來n行,分別表示這n 個物品的各自體積

輸出格式:

一個整數,表示箱子剩余空間。

輸入輸出樣例

輸入樣例#1: 復制
24
6
8
3
12
7
9
7
輸出樣例#1: 復制
0

說明

NOIp2001普及組 第4題

把該物品的體積看作該物品的價值, 方程:f[j]=max(f[j],f[j-w[i]]+w[i])

;最後輸出(m-f[j]);

emm...

To tell you truth, I can‘t unsderstand it...

Hope you won‘t.

某人說的對,感性理解。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<cstring>
 6 using namespace std;
 7 
 8 int v,n,f[20002],w[32];
 9 
10 int main()
11 { 12 scanf("%d%d",&v,&n); 13 for(int i=1;i<=n;++i) scanf("%d",&w[i]); 14 for(int i=1;i<=n;++i) 15 for(int j=v;j>=w[i];j--) 16 f[j]=max(f[j],f[j-w[i]]+w[i]); 17 printf("%d",v-f[v]); 18 }

P1049 裝箱問題(01背包)