日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

DP_knapsack

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DP_knapsack 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態規劃法解0-1背包問題

問題描述:

有n個背包,重量依次為w1,w2, ... ,wn, 價值依次是v1,v2, ... ,vn, 現在有一個大背包,其容量是capacity,往其中裝小背包,要求得到的總價值最大,如何裝?

用value[i, w]表示有i個背包且總重量最大是w時的價值,那么當考慮第i個背包時,有兩種情況

1. 將此背包裝入大包,價值是 v[i] + value[i - 1, w- wi]

2. 此背包不裝入打包,價值是 value[i - 1, w]

取兩者中的最大值即可

代碼如下:

?

Code
?1?class?Knapsack
?2?{
?3?????///?<summary>
?4?????///?0-1?Knapsack?problem?solution
?5?????///?</summary>
?6?????///?<param?name="w">the?weight?array</param>
?7?????///?<param?name="v">the?value?array</param>
?8?????///?<param?name="capacity">the?total?weight?that?allowed</param>
?9?????///?Note:?w?and?v?must?have?the?same?length
10?????///?let?v[i,w]?represents?for?the?max?value?of?the?first?i?knapsack?with?the?capacity?of?w
11?????public?void?Knapsack01(int[]?w,?int[]?v,?int?capacity)
12?????{
13?????????int?r?=?v.Length?+?1;
14?????????int?c?=?r;
15?
16?????????int[,]?vt?=?new?int[r,?c];?//?value?table
17?????????bool[,]?st?=?new?bool[r,?c];?//?selected?table
18?????????bool[]?res?=?new?bool[w.Length];
19?????????
20?????????//?initialization
21?????????for?(int?i?=?0;?i?<?r;?i++)
22?????????{
23?????????????vt[i,?0]?=?0;?//?the?value?with?a?capacity?of?0?is?0
24?????????????vt[0,i]?=?0;?//?the?value?of?0?knapsack?is?0
25?????????}
26?
27?????????//?note?the?index?i?and?j?start?from?1
28?????????//?so?you?can?see?w[i?-?1]?below?in?order?to?start?from?0?for?array?w
29?????????for?(int?i?=?1;?i?<?r;?i++)
30?????????{
31?????????????for?(int?j?=?1;?j?<=?capacity;?j++)
32?????????????{
33?????????????????int?unselValue?=?vt[i?-?1,?j];?//?unselected?current?knapsack
34?
35?????????????????if?(j?>=?w[i?-?1])
36?????????????????{
37?????????????????????int?selValue?=?v[i?-?1]?+?vt[i?-?1,?j?-?w[i?-?1]];
38?????????????????????if?(selValue?>=?unselValue)
39?????????????????????{
40?????????????????????????vt[i,?j]?=?selValue;
41?????????????????????????st[i,?j]?=?true;
42?????????????????????????if(selValue?>?unselValue)
43?????????????????????????????res[i?-?1]?=?true;
44?????????????????????????continue;
45?????????????????????}
46?????????????????}
47?
48?????????????????vt[i,?j]?=?unselValue;
49?????????????????st[i,?j]?=?false;
50?????????????}
51?????????}
52?
53?????????//?Output?the?element?in?array?w?being?selected
54?????????//for?(int?i?=?r?-?1;?i?>=?0&&?capacity?>=?0;?i--)
55?????????//{
56?????????//????if?(st[i,?capacity]?==?true)
57?????????//????{
58?????????//????????Console.WriteLine(w[i?-?1]);
59?????????//????????capacity?-=?w[i?-?1];
60?????????//????}
61?????????//}
62?
63?????????for(int?i?=?res.Length?-?1;?i?>=?0;?i--)
64?????????????if(res[i]?==?true)
65?????????????????Console.WriteLine(i);
66?????}
67?}
68?

?

轉載于:https://www.cnblogs.com/graphics/archive/2009/06/23/1509618.html

總結

以上是生活随笔為你收集整理的DP_knapsack的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。