syhd142 |
|
|||
日歷
統(tǒng)計
導航常用鏈接留言簿(2)隨筆檔案(23)文章分類(270)
文章檔案(122)我的豆瓣搜索最新評論
閱讀排行榜
評論排行榜 |
0/1背包問題的最簡單特殊情況,重量和價值相等。要求輸出放入了哪些物品,順序和輸入的時候相同,這樣從DP的時候從后面往前面遞推就好了。 背包問題可以只用一個一維數組表示,這樣節(jié)省空間。 #include <stdio.h>
#include <string.h> #define W 10005 int c[W], l[25]; bool p[25][W]; int main() { int w, n; while(~scanf("%d", &w)) { scanf("%d", &n); for(int i = 1; i <= n; i++) scanf("%d", &l[i]); memset(c, 0, sizeof(c)); memset(p, 0, sizeof(p)); for(int i = n; i; i--) for(int j = w; j >= l[i]; j--) { if(c[j] < c[j - l[i]] + l[i]) { c[j] = c[j - l[i]] + l[i]; p[i][j] = 1; } } for(int i = 1, j = w; i <= n; i++) if(p[i][j]) { printf("%d ", l[i]); j -= l[i]; } printf("sum:%d\n", c[w]); } return 0; }
評論:
|
![]() |
|
Copyright © Fucker | Powered by: 博客園 模板提供:滬江博客 |