多組輸入
每行輸入第乙個數字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...