BFU C.yi的书包 01背包【水题】
先上題
終于到了開開心心的暑假,然而對于一名ACMer來說,暑假并沒有那么輕松。fudq跟我說:“我們ACMer修的,是一份境界。外修語法,內(nèi)修算法。以數(shù)據(jù)為根,算天算地算自己。我這有幾本書,你暫且拿去研修”。然后他給了我一本《算法入門經(jīng)典》,一本《算法導論》,一本《算法藝術(shù)與信息學競賽》balabalabala....等等等等,我記得他當時是用卡車拖過來的。不過在感激得痛哭流涕的同時,C.yi發(fā)現(xiàn)了一個嚴重的問題??那就是怎么把這些書都帶回去呢?要知道行李都是有限重的,而且苦逼的C.yi回家只能背一個書包。看著愁眉苦臉痛哭流涕的C.yi,學長鄒神跳了出來。他說“看你這一臉苦逼的,莫非是在愁傅總給你的書你怎么帶回去?哈哈,不要問我怎么知道,那什么外修語法內(nèi)修算法什么鬼的他當年也跟我說過,我可以告訴你一個好辦法。你可以根據(jù)書的難度和重要程度以及是否適合你現(xiàn)在學習給書評定一個價值,然后有選擇的帶”。這可又愁剎了C.yi,怎么在書包的限重之下盡可能價值高的把書帶回家呢?請你幫他寫一個代碼來解決這個問題。
第一行是一個數(shù)字T,表示有T組數(shù)據(jù)。
對于每一組數(shù)據(jù),首先輸入的是書的本書n(n<=1000),和書包的限重w(w<=1000)。
再然后有n個整數(shù)表示書的價值。
再再然后有n個整數(shù)表示每本書的重量。
每組數(shù)據(jù)輸出符合要求的最大價值。(結(jié)果不會超過int范圍)
樣例輸入1? 1 5 10 1 2 3 4 5 5 4 3 2 1 樣例輸出1 14#include<iostream> #include<algorithm> #include<string.h> using namespace std;int B[1010]; int value[1010], weight[1010]; int main() {int T;scanf("%d", &T);while (T--){memset(B, 0, sizeof(B));int n, w;scanf("%d%d", &n, &w);for (int i = 1; i <= n; i++){scanf("%d", &value[i]);}for (int i = 1; i <= n; i++){scanf("%d", &weight[i]);}for (int i = 1; i <= n; i++){for (int j = w; j >= weight[i]; j--){B[j] = max(B[j], B[j - weight[i]] + value[i]);}}cout << B[w] << endl;}return 0; }
不懂為什么B數(shù)組不能在定義時 B【1010】={0},會wa
只能用memset
總結(jié)
以上是生活随笔為你收集整理的BFU C.yi的书包 01背包【水题】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强烈推荐| 飞桨十大中文NLP开源工具详
- 下一篇: eclipse新建java项目隐藏了bi