高數Umaru系列(9) 哈士奇

2021-09-14 06:05:48 字數 2285 閱讀 2347

problem description

由於高數巨養的喵星人太傲嬌了,要天天吃新鮮貓糧而且還經常欺負高數巨,所以高數巨決定買幾條哈士奇嚐嚐鮮。這天高數巨來到了二**市場買哈士奇,高數巨看完了所有的哈士奇,記下了每條哈士奇的**,並根據對它們的好感程度給它們每只都賦予了乙個萌值。高數現在手裡有x元,她想通過購買若干條哈士奇來獲得盡可能多的萌值。現在給定高數巨手裡的錢x以及n條哈士奇的**和萌值,求高數巨最多可獲得多少萌值

input

多組輸入。

對於每組輸入,第一行有兩個整數n,x(1 < = n < = 100,1 < = x < = 1000),分別表示哈士奇的數量和高數巨的錢數

接下來的n行每行有兩個整數pi,mi(1 < = pi,mi < = 100),分別表示第i條哈士奇的**和萌值

output

對於每組資料,輸出乙個整數,表示高數巨最多可以獲得的萌值,每組輸出佔一行

sample input

2 100

50 20

60 40

3 100

20 55

20 35

90 95

1 10

20 50

sample output

4095

0

現在有乙個**為2的物品,你手裡有乙個承受能力為8的揹包,並且已經裝滿了,那麼我怎麼知道此擺在我面前的**為2的物品能不能增加我的揹包內的價值呢?

很簡單,這個時候我們就應該找到,當前揹包重量減去2時,也就是8-2 = 6時的最大價值,看看加上眼前物品是否比原來大,大就裝上,不大就放棄。

一維陣列:

#include #include #include #include #include using namespace std;

int main()

; //揹包

for(int i = 0; i <= n-1; i++)

for(int i = 0; i <= n-1; i++)

}printf("%d\n", earn[v]);

}return 0;

}

#includeusing namespace std;

int p[110];

int w[110];

int earn[1010];

int main()

for(int i = 0; i < n; i++)

}cout《二維陣列:

01揹包問題需要求解的就是,為了體積v的揹包中物體總價值最大化,n件物品中第i件應該放入揹包中嗎?(其中每個物品最多只能放一件)

為此,我們定義乙個二維陣列,其中每個元素代表乙個狀態,即前i個物體中若干個放入體積為v揹包中最大價值。陣列為:f[n][v]f[n][v],其中f[i][j]表示前i件中若干個物品放入體積為j的揹包中的最大價值。

②、初始狀態

初始狀態為f[0][0−v]f[0][0−v]和f[0−n][0]f[0−n][0]都為0,前者表示前0個物品(也就是空物品)無論裝入多大的包中總價值都為0,後者表示體積為0的揹包啥價值的物品都裝不進去。

③、轉移函式

if (揹包體積j小於物品i的體積)

f[i][j] = f[i-1][j] //揹包裝不下第i個物體,目前只能靠前i-1個物體裝包

else

f[i][j] = max(f[i-1][j], f[i-1][j-vi] + wi)

最後一句的意思就是根據「為了體積v的揹包中物體總價值最大化,nn件物品中第ii件應該放入揹包中嗎?」轉化而來的。vivi表示第ii件物體的體積,wiwi表示第ii件物品的價值。這樣f[i-1][j]代表的就是不將這件物品放入揹包,而f[i-1][j-vi] + wi則是代表將第i件放入揹包之後的總價值,比較兩者的價值,得出最大的價值存入現在的揹包之中。

n件物品中第i件應該放入揹包中嗎?

誤區:並非第i件商品放入總價值就多!!

因為f[i-1][/] 「/」揹包能放的重量變了,所以放入的i-個物品就要變化,所以前i-1個物品價值會變

#includeusing namespace std;

int main()

;//二維陣列並初始化

for(int i = 1; i <= n; i++)//從放入1個物品開始,因為放入0個物品總價值為0

else}}

cout<}

return 0;

}

高數Umaru系列(9) 哈士奇

高數umaru系列 9 哈士奇 time limit 1000ms memory limit 65536kb problem description 由於高數巨養的喵星人太傲嬌了,要天天吃新鮮貓糧而且還經常欺負高數巨,所以高數巨決定買幾條哈士奇嚐嚐鮮。這天高數巨來到了二 市場買哈士奇,高數巨看完了所...

高數Umaru系列(9) 哈士奇

time limit 1000 ms memory limit 65536 kib submit statistic problem description 多組輸入。對於每組輸入,第一行有兩個整數n,x 1 n 100,1 x 1000 分別表示哈士奇的數量和高數巨的錢數 對於每組資料,輸出乙個整...

高數Umaru系列(9) 哈士奇

time limit 1000 ms memory limit 65536 kib submit statistic problem description 由於高數巨養的喵星人太傲嬌了,要天天吃新鮮貓糧而且還經常欺負高數巨,所以高數巨決定買幾條哈士奇嚐嚐鮮。這天高數巨來到了二 市場買哈士奇,高數巨...