題目的意思就就是給你乙個值,在給你幾個數字.用這些數字湊出最接近這個值的組合.簡單01揹包 + 路徑列印.
路徑列印時可以根據 f[i][j] == f [ i - 1] [ j ] 的話,這個數就沒有被選擇.
從後往前找:
ac**;
#include#includeconst int n = 1000;
const int m = 25;
int track[m];
int f[m][n * m];
int vis[m];
int n;
int sum;
int dp()
} }}void print() }
}int main ()
memset(f , -1 ,sizeof(f));
memset(vis , 0 ,sizeof(vis));
for (int i = 0 ; i < n * m;i++)
dp();
print();
printf("sum:%d\n" ,f[n][sum]);
}}
UVA 624 01揹包求方案
題目 題意 給定揹包容量,給定物品個數,然後是物品,價值和體積相等。求最大價值時的放入方案,多解輸出一解即可 思路 每次更新揹包時順便記錄被誰跟新的即可,然後逆向求方案,正向輸出 總結 揹包和dp忘得差不多了。憂傷。是時候刷一波了 include include include include us...
CD UVA 624(01揹包 記憶路徑)
題意 乙個軌道長度為n的cd,k首歌,每首歌的長度不同,問這張cd上最多能燒錄多長的歌曲,歌曲必須被整首燒錄 最後輸出cd上所刻的歌曲及總長度 01揹包加上路徑記憶 用二維陣列記錄路徑vis i j 表示第i首在長度為j是被錄製 include include include include usi...
0 1揹包 記錄路徑 UVA624
題目大意 有乙個固定長度的磁帶,想要把cd放進去,空間利用率盡可能的高,每個磁帶只能用一次。01揹包問題,就是把體積和重量看做了tracks和time,這裡注意列印路徑的方法 include include include include include include include includ...