P1049 裝箱問題(01背包)
阿新 • • 發佈:2018-04-19
esp ora 理解 pri namespace str sam 接下來 AC ;最後輸出(m-f[j]);
題目描述
有一個箱子容量為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])
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背包)