這個題用貪心做肯定不行的,因為貪心得到的只是區域性最優解,而這個題需要的是全域性最優解,所以就用到了動態規劃。
用動態規劃一定要找到這個題的狀態轉移方程。每乙個物體,都只會有兩種情況:裝入箱子 和 不裝入箱子,所以,定義兩個陣列,第乙個陣列s用來儲存當容量為某某時,能裝的最大體積,第二個陣列a用來儲存每個物品的體積;
所以,狀態轉移方程:s[j]=max(s[j],s[j-a[i]]+a[i]);
也就是說容量為 j 時,選第 i 個物品和不選第 i 個物品的最大值。
1 #include2兩層迴圈,第二層迴圈的 j 一定要大於等於 a[i] 因為若小於 a[i] 的話,這件物品就取不了。using
namespace
std;
3long
long v,n,a[35],s[20010
],w;
4int
main()512
for(int i=1;i<=n;++i)
1318
}19 w=v-s[v];
20 cout<
21return0;
22 }
最後,題目求的是箱子的剩餘空間,所以要用總空間再減去所用的空間。
洛谷 P1049 裝箱問題
題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格...
洛谷P1049 裝箱問題
有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入格式 1個整數,表示箱子容量 1個整數,表示有n個物品 接下來n行,分別表示這n個物品的各自體積 輸出格式 1個整數,表示箱子剩餘空間。輸入樣例 1 複製 2468 31...
洛谷P1049 裝箱問題
p1049 裝箱問題 題目描述 有乙個箱子容量為vv 正整數,0 le v le 200000 v 20000 同時有nn個物品 0要求nn個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 11個整數,表示箱子容量 11個整數,表示有nn個物品 接下來nn行,分別表示這n...