01揹包記錄路徑 東東開車了

2021-10-05 16:50:46 字數 1277 閱讀 6357

多組輸入

每行輸入第乙個數字n, 代表總時間,第二個數字 m 代表有 m 張唱片,後面緊跟 m 個數字,代表每張唱片的時長 例如樣例一: n=5, m=3, 第一張唱片為 1 分鐘, 第二張唱片 3 分鐘, 第三張 4 分鐘

所有資料均滿足以下條件:

n≤10000

m≤20

輸出所有唱片的時長和總時長,具體輸出格式見樣例

sample input

5 3 1 3 4

10 4 9 8 4 2

20 4 10 5 7 4

90 8 10 23 1 2 3 4 5 7

45 8 4 10 44 43 12 9 8 2

sample output

1 4 sum:5

8 2 sum:10

10 5 4 sum:19

10 23 1 2 3 4 5 7 sum:55

4 10 12 9 8 2 sum:45

本題要輸出01揹包的路徑,這樣的話需要二維陣列記錄過程:p[i][j]表示j容量的最優解是否選取了第i個物品,之後再遞迴到j-a[i]的容量是否選取了第i-1個物品…

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define rep(i,s,t) for(int i=s;i<=t;i++)

#define mem(a,s) memset(a,s,sizeof(a))

typedef

long

long ll;

const

int m=

1e4+10;

const

int n=20+

5;int dp[m]

;int p[n]

[m];

int a[n]

;int n, l;

void

output

(int i,

int l)

intmain()

output

(n,l)

; cout <<

"sum:"

<< dp[l]

<< endl;

}return0;

}

01揹包 回溯 東東開車了

東東開車出去泡妞 在夢中 車內提供了 n 張cd唱片,已知東東開車的時間是 n 分鐘,他該如何去選擇唱片去消磨這無聊的時間呢 假設 input 多組輸入 每行輸入第乙個數字n,代表總時間,第二個數字 m 代表有 m 張唱片,後面緊跟 m 個數字,代表每張唱片的時長 例如樣例一 n 5,m 3,第一張...

記錄路徑的01揹包問題

在01揹包問題中,求出最優解並記錄揹包內物品,動態規劃的方法求其問題,最核心的公式為f i j max,在考慮當前第i個物品是否放入的時候就是比較 前面的i 1個物品放在容量為j的揹包中時揹包中總價值與 前面的i 1個物品放在容量為j weight i 的揹包中並加上當前第i個的價值value i ...

0 1揹包 記錄路徑 UVA624

題目大意 有乙個固定長度的磁帶,想要把cd放進去,空間利用率盡可能的高,每個磁帶只能用一次。01揹包問題,就是把體積和重量看做了tracks和time,這裡注意列印路徑的方法 include include include include include include include includ...