c 揹包問題

2021-10-09 02:00:16 字數 1615 閱讀 1549

動態規劃和貪心中的五個揹包問題,收集並整理出來放在這裡。

0/1揹包問題是一道動規的題,其題目意思就是每樣物品只能取乙個。二維**中概括來說是上面位置的數&&上面的位置減物品質量這個數值後這個位子上的數加物品的價值比較哪個大,這裡為了方便都轉換為一維陣列來做。(一樣的)

#include

using

namespace std;

int dp[

100]

;int

main()

for(

int i=

1;i<=n;i++)}

} cout<;return0;

}

其中w是體積,c是價值。

完全,也就是物品可以取無限件。沒什麼差別,只是**橫向不一樣(從小到大,從當前體積開始)

#include

using

namespace std;

int dp[

1090];

intmain()

for(

int i=

1;i<=n;i++)}

cout<

}

n1是體積,v1是價值。

無非是0/1揹包多了乙個數量控制罷了。

#include

using

namespace std;

int dp[

1000];

intmain()

for(

int i=

1;i<=n;i++

)//商品種類的數量 }}

cout<

}

w是體積,v是價值,s是數量。

三種混起來而已,我甭說了吧

#include

using

namespace std;

int dp[

1000];

intmain()

for(

int i=

1;i<=n;i++)}

else

if(c[i]==0

)}else

if(c[i]

>1)

}}} cout<

}

前四種都是動規,這種是貪心哦。又叫小數揹包問題。

#include

//#include

#include

using

namespace std;

int m,n;

struct node

a[1000];

bool

cmp(node x,node y)

intmain()

// sort (a,a+n,cmp);

for(

int i=

0;i1;i++)}

}for

(int i=

0;i)else

} cout

)

}

結構體中,v是價值,w是體積,k是價效比。

C 揹包問題

在0 1揹包中,物體或者被裝入揹包,或者不被裝入揹包,只有兩種選擇 迴圈變數i,j的意義 前i個物品能夠裝入載重量為j的揹包中 陣列value的意義 value i j 表示前i個物品能加載重量為j的揹包中的最大價值 若w i j,第i個物品不被裝入揹包,否則,第i個物品放入揹包後的最大價值 val...

C 揹包問題

有許多東西要放入揹包,但揹包容量有限,現給出物品的種類,以及每種物品的數量 體積和價值,求出揹包能夠裝物品的最大價值。輸入有多組資料,每組資料的第一行有2個整數,物品種數n 1 n 2000 和揹包裝載體積v 1 v 500 2行到i 1行每行3個整數,為第i種物品的數量m 1 m 5000 體積w...

c 揹包問題

又鴿了好久 博主剛剛學會揹包問題不久,然後有一段時間沒練習了 今天就來重新溫習一下,順手就寫了這一篇部落格。好了,下面進入正題!揹包問題是動態規劃的乙個分支 主要是分成了01揹包 完全揹包和多重揹包。下面從01揹包開始講解。01揹包是在m件物品取出若干件放在空間為w的揹包裡,每件物品的體積為w1,w...