疊箱子問題 之 動態規劃

2022-09-06 03:30:13 字數 1678 閱讀 5978

/*

疊箱子問題:

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 #include 

10 #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。每乙個箱子的外型尺寸都是一樣的,現在...