雙十一就這樣轟轟烈烈的來了,對於乙個買東西只靠網購的資深宅男小灰灰來說,這的確是個令人興奮的事情。
而現在的小灰灰卻是痛並快樂著,因為本就乾癟的錢包實在擠不出多少money用來購物了,誰叫他把錢都用來買紙了呢…話說錢到用時方恨少,小灰灰處在深深的憂慮中,不知道怎樣才能用剩下的錢買到最有價值的東西,各位小夥伴你們能把他搞定這件事嗎
第一行乙個整數t表示有t組測試資料(t<=50)。
接下來的t組測試資料:
第一行包含兩個整數n和m,n表示小灰灰有多少錢,m表示有多少件物品(1<=m<=100)。
再二行包含m個整數,表示對應每個物品的**。
第三行包含m個整數,表示對應每個物品的價值。
0請幫助小灰灰使用僅有的錢購買物品,並使物品的總價值最大。輸出最大值。
410 5
2 3 7 7 3
4 3 5 6 4
10 8
5 6 4 2 3 7 1 8
5 3 5 3 5 7 5 7
20 7
10 15 4 5 6 8 5
15 14 9 2 2 6 7
10 3
7 4 5
16 7 10
case #1: 11
case #2: 18
case #3: 31
case #4: 17
#include
using
namespace std;
int dp[
300100];
intmain()
printf
("case #%d: %d\n"
,k,dp[n]);
}}return0;
}
fill函式
按照單元賦值,將乙個區間的元素都賦同乙個值
在標頭檔案< algorithm>裡面
fill函式可以賦值任何,而且使用方法特別簡便:
例如int陣列:fill(arr, arr + n, 要填入的內容);
#include
#include
using
namespace std;
intmain()
vector也可以:fill(v.begin(), v.end(), 要填入的內容);
#include
#include
#include
using
namespace std;
intmain()
;fill
(v.begin()
, v.
end(),
1);return0;
}
memset函式
按照位元組填充某字元
在標頭檔案< cstring>裡面
因為memset函式按照位元組填充,所以一般memset只能用來填充char型陣列,(因為只有char型佔乙個位元組)如果填充int型陣列,除了0和-1,其他的不能。因為只有00000000 = 0,-1同理,如果我們把每一位都填充「1」,會導致變成填充入「11111111」
#include
#include
using
namespace std;
intmain()
fill_n
引數包括 : 乙個迭代器,乙個計數器以及乙個值。該函式從迭代器指向的元素開始,將指定數量的元素設定為給定的值。
fill_n
(vec.begin,
10, val)
;
注意: 不能在沒有元素的空容器上呼叫fill_n函式,但是可以通過下面的方法改進。
為了保證演算法有足夠的元素儲存輸出資料,我們使用「插入迭代器」(insert iterator),插入迭代器是可以給基礎容器新增元素的迭代器。
使用 back_inserter 的程式需要包含標頭檔案#include,將上面的程式改寫成
#include
vector<
int> vec;
//定義乙個空容器
fill_n (
back_inserter
(vec)
,10 val)
;
給定n個物品,每個物品有乙個重量w和乙個價值v.你有乙個能裝m重量的揹包.問怎麼裝使得所裝價值最大.每個物品只有乙個
輸入的第一行包含兩個整數n, m,分別表示物品的個數和揹包能裝重量。
以後n行每行兩個數wi和vi,表示物品的重量和價值
輸出1行,包含乙個整數,表示最大價值。
3 52 3
3 54 7
#include
using
namespace std;
int a[
1001
],b[
1001
],dp[
1001];
intmain()
for(
int i=
1; i<=n; i++)}
cout<
}
北大網路實驗室經常有活動需要叫外買,但是每次叫外買的報銷經費的總額最大為c元,有n種菜可以點,經過長時間的點菜,網路實驗室對於每種菜i都有乙個量化的評價分數(表示這個菜可口程度),為vi,每種菜的**為pi, 問如何選擇各種菜,使得在報銷額度範圍內能使點到的菜的總評價分數最大。
注意:由於需要營養多樣化,每種菜只能點一次。
輸入的第一行有兩個整數c(1 <= c <= 1000)和n(1 <= n <= 100),c代表總共能夠報銷的額度,n>代表能點菜的數目。接下來的n行每行包括兩個在1到100之間(包括1和100)的的整數,分別表示菜的》**和菜的評價分數。
輸出只包括一行,這一行只包含乙個整數,表示在報銷額度範圍內,所點的菜得到的最大評價分數。
1 31 5
3 32 5
24 8
2 98 6
4 11 4
2 210 5
2 11 4530
#include
using
namespace std;
const
int maxn=
10005
;int a[maxn]
,pi[maxn]
,vi[maxn]
;int
main()
for(i=
1;i<=n;i++)}
cout << a[c]
<< endl;
}return0;
}
動態規劃 揹包問題
給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...
動態規劃 揹包問題
不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...
動態規劃 揹包問題
1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...