洛谷 P1049 裝箱問題

2022-02-19 05:54:03 字數 704 閱讀 7826

這個題用貪心做肯定不行的,因為貪心得到的只是區域性最優解,而這個題需要的是全域性最優解,所以就用到了動態規劃。

用動態規劃一定要找到這個題的狀態轉移方程。每乙個物體,都只會有兩種情況:裝入箱子 和 不裝入箱子,所以,定義兩個陣列,第乙個陣列s用來儲存當容量為某某時,能裝的最大體積,第二個陣列a用來儲存每個物品的體積;

所以,狀態轉移方程:s[j]=max(s[j],s[j-a[i]]+a[i]);

也就是說容量為 j 時,選第 i 個物品和不選第 i 個物品的最大值。

1 #include2

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 }

兩層迴圈,第二層迴圈的 j 一定要大於等於 a[i] 因為若小於 a[i] 的話,這件物品就取不了。

最後,題目求的是箱子的剩餘空間,所以要用總空間再減去所用的空間。

洛谷 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...