ycb的ACM高階之路(多重揹包模板)

2021-08-01 12:40:21 字數 1077 閱讀 4949

描述

ycb是個天資聰穎的孩子,他的夢想是成為世界上最偉大的acmer。為此,他想拜附近最有威望的dalao為師。dalao為了判斷他的資質,給他出了乙個難題。dalao把他帶到乙個到處都是題的oj裡對他說:「孩子,這個oj裡有一些不同的題,做每一道題都需要一些時間,每一題也有它自身的rp(人品值)。我會給你一段時間,在這段時間裡,你可以做一些題。如果你是乙個聰明的孩子,你應該可以讓做題的總rp最大。」   如果你是ycb,你能完成這個任務嗎?

輸入 輸入檔案的第一行是乙個t,表示測試組數,接下來t組每組第一行包含兩個正整數n,m。m表示總共能夠用來做題的時間,n代表oj裡的題目的數目。接下來的n行每行包括兩個的整數,分別表示做每個題的時間ti和這道題的人品值vi。

1 <= n, m <= 100000,

1 <= ti, vi <= 10

輸出 輸出檔案僅包含乙個整數表示規定時間內可以做題得到的最大人品值。

樣例輸入1 複製

1 3 9

10 10

8 1

1 2

樣例輸出1

3一看是裸的01揹包 但是資料量太大,1e10

又看到消耗和價值這麼小 1~10 所以 會有很多重複的揹包

。。然後因為單純以為只有揹包價值以為只有10種。。但是因為 時間和價值有不同的組合是 10*10 然後進行多重揹包即可

using namespace std;

const int maxn=1e6+10;

int dp[maxn];

int vis[20][20];

int m;

void comdp(int w,int v)

void zeroone(int w,int v)

void multidp(int w,int v,int cnt)

int k=1;

while(k<=cnt)

zeroone(cnt*w,cnt*v);

return ;

} int main()

for(int i=1;i<=10;i++)

printf(「%d\n」,dp[m] ); } }

北大ACM 1742,Coins(多重揹包)

多重揹包問題。詳解見部落格 這道題時間卡得超嚴,在看大佬的 之前瘋狂tle。如下 include include includeusing namespace std typedef long long ll const int maxn 1e5 5 bool dp maxn 用bool快超多 in...

POJ 1742 Coins 多重揹包,高階指南

演算法競賽高階指南,281 頁,多重揹包 此處 抄書上的 題目意思 n種硬幣,每種硬幣的幣值 a i 數量c i 給出乙個數值m 求出可以拼成 1 m 這 m種幣值的哪幾種?本題要點 1 多重揹包 的 直接拆分法 bool f maxm 在階段i,f j 表示前i種硬幣是否能拼成面值j 在狀態i 遍...

O V n 的多重揹包問題

多重揹包問題 有n件物品,第i件價值為wi,質量為vi,有c1件,問,給定容量v,求獲得的最大價值。樸素做法 視為0,1,2,k種物品的分組揹包 每組只能選乙個 f i j max f i j k v i k w i 但是i,j,k都要列舉,複雜度為 n v k 樸素做法的改進 因為發現用二進位制可...