/*疊箱子問題:
dp[i][j] := 第i個箱子到第n個箱子疊放起來總重量為j,所能疊放的最多箱子數
dp[i][j] = max(dp[i][j], dp[i+1][j - weight[i]] + 1)
*/
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include
19 #include 20
using
namespace
std;
21 typedef pairpii;
22 typedef long
long
int64;
23const
int inf = 0x3f3f3f3f;24
const
int modprime = 3046721;25
const
double eps = 1e-9;26
const
int maxn = 100010;27
const
int maxm = 30;28
const
char opt[4] = ;
2930
int dp[6010
];31
/*32
pw: 從1號到n號的自身重量(1 <= wn <= 3000)
33pm: 從1號到n號的可承受重量(1 <= mn <= 3000)
34返回值: 一次所能疊放的最多箱子數
35*/
36int calcmaxnum(int n, int * pw, int *pm)
3742
43int maxtotalweight = 6000
;44 fill(dp, dp + maxtotalweight + 1, 0
);45
46for (int i = n - 1; i >= 0; --i)
4754}55
}56int ans = *max_element(dp, dp + maxtotalweight + 1
);57
return
ans;58}
5960
6162
intmain()63;
71int ms =;
73int ret = calcmaxnum(5,74
ws,75
ms);
76 (ret == 4
);77
78#ifdef home
79 cerr << "
time elapsed:
"<< clock() / clocks_per_sec << "ms"
<80_crtdumpmemoryleaks();
81#endif
82return0;
83 }
動態規劃 疊放箱子
動態規劃 疊放箱子 問題描述 某港口有一批箱子,將其編號,分別為1至n。每個箱子的尺寸規格都是一樣的,現在要將其中的某些箱子疊放起來,箱子疊放規則是 1 每個箱子上最多只能直接疊放乙個箱子 2 編號較小的箱子不能直接放在編號較大的箱子之上 3 每個箱子都給出了自身重量與可承受重量,每個箱子之上的所有...
疊放箱子問題
疊放箱子問題 description 某港口有一批貨櫃,將其編號,分別為1至n。每乙個箱子的外型尺寸都是一樣的,現在要將其中某些貨櫃疊放起來,貨櫃疊放的規則如下 1 每個貨櫃上最多只能直接疊放乙個貨櫃。2 編號較小的貨櫃不能放在編號較大的貨櫃之上。3 每個貨櫃都給出了自身的重量和可承受的重量,每個貨...
疊放箱子問題
疊放箱子問題 time limit 10000ms memory limit 65536k total submit 309 accepted 115 case time limit 1000ms description 某港口有一批貨櫃,將其編號,分別為1至n。每乙個箱子的外型尺寸都是一樣的,現在...