揹包問題和,揹包問題和0 1揹包問題有什麼區別

時間 2021-09-19 11:22:40

1樓:

揹包問題和0-1揹包問題區別為:迴圈變數不同、約束條件不同、最大總價值不同。

一、迴圈變數不同

1、揹包問題:揹包問題須先求出列座標j較小的元素,故讓迴圈變數j的值從小到大遞增。

2、0-1揹包問題:0-1揹包問題須先求出列座標j較大的元素,故讓迴圈變數j的值從大到小遞減。

二、約束條件不同

1、揹包問題:揹包問題的約束條件是給定幾種物品,物品可以取無限次。

2、0-1揹包問題:0-1揹包問題的約束條件是給定幾種物品,物品只可以取一次。

三、最大總價值不同

1、揹包問題:揹包問題若取了1件第i個物品,則總容量變為j-w[i],剩下的仍可以在前i件物品中去取,其最大總價值為b[i][j-w[i]] + p[i]。

2、0-1揹包問題:0-1揹包問題若取了1件第i個物品,則總容量變為j-w[i],剩下的只能在前i-1件物品中去取了,其最大總價值為b[i-1][j-w[i]] + p[i]。

2樓:匿名使用者

0-1揹包問題物品有兩種選擇,要麼放進去要麼不放進去

而揹包問題的話可以放部分,比如一斤糖可以放1/3斤 換句話說這裡物品取值為(0,1)

而0-1揹包問題物品只能取0和1兩個值 望採納

動態規劃中的0-1揹包問題怎麼去理解?要求給出具體例項和詳細步驟。。。

3樓:匿名使用者

* 一個旅行者有一個最多能用m公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,...,wn,它們的價值分別為p1,p2,...,pn.

若每種物品只有一件求旅行者能獲得最大總價值。

輸入格式:

m,nw1,p1

w2,p2

......

輸出格式:

x */

因為揹包最大容量m未知。所以,我們的程式要從1到m一個一個的試。比如,開始任選n件物品的一個。

看對應m的揹包,能不能放進去,如果能放進去,並且還有多的空間,則,多出來的空間裡能放n-1物品中的最大價值。怎麼能保證總選擇是最大價值呢?看下錶。

測試資料:

10,3

3,44,5

5,6c[i][j]陣列儲存了1,2,3號物品依次選擇後的最大價值.

這個最大價值是怎麼得來的呢?從揹包容量為0開始,1號物品先試,0,1,2,的容量都不能放.所以置0,揹包容量為3則裡面放4.

這樣,這一排揹包容量為4,5,6,....10的時候,最佳方案都是放4.假如1號物品放入揹包.

則再看2號物品.當揹包容量為3的時候,最佳方案還是上一排的最價方案c為4.而揹包容量為5的時候,則最佳方案為自己的重量5.

揹包容量為7的時候,很顯然是5加上一個值了。加誰??很顯然是7-4=3的時候.

上一排 c3的最佳方案是4.所以。總的最佳方案是5+4為9.

這樣.一排一排推下去。最右下放的資料就是最大的價值了。

(注意第3排的揹包容量為7的時候,最佳方案不是本身的6.而是上一排的9.說明這時候3號物品沒有被選.

選的是1,2號物品.所以得9.)

從以上最大價值的構造過程中可以看出。

f(n,m)=max這就是書本上寫的動態規劃方程.這回清楚了嗎?

下面是實際程式:

#include

int c[10][100];/*對應每種情況的最大價值*/int knapsack(int m,int n)else c[i][j]=c[i-1][j];

}return(c[n][m]);

}int main()

system("pause");}

4樓:匿名使用者

引用一個朋友的博文回答你的問題。

description

試設計一個用回溯法搜尋子集空間樹的函式。該函式的引數包括結點可行性判定函式和

上界函式等必要的函式,並將此函式用於解0-1揹包問題。

0-1 揹包問題描述如下:給定n 種物品和一個揹包。物品i 的重量是 wi ,其價值為 vi ,

揹包的容量為c。應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大?

在選擇裝入揹包的物品時,對每種物品i只有2 種選擇,即裝入揹包或不裝入揹包。不能

將物品i 裝入揹包多次,也不能只裝入部分的物品i。

input

由檔案input.txt給出輸入資料。第一行有2個正整數n和c。n是物品數,c是揹包的容

量。接下來的1 行中有n個正整數,表示物品的價值。第3 行中有n個正整數,表示物品的

重量。output

將計算出的裝入揹包物品的最大價值和最優裝入方案輸出到檔案output.txt。

sample input

5 10

6 3 5 4 6

2 2 6 5 4

sample output

151 1 0 0 1

source

//code c++

#include

#include

#include

int min(int w,int c)

void knapsack(int v,int w,int c,int n,int**m) //求最優值

m[1][c]=m[2][c];

if(c>=w[1])

m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]);

cout<>n>>c;

int *v=new int[n+1];

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

cin>>v[i];

int *w=new int[n+1];

for(int j=1;j<=n;j++)

cin>>w[j];

int *x=new int[n+1];

m=new int*[n+1]; //動態的分配二維陣列

for(int p=0;p

knapsack(v,w,c,n,m);

traceback(m,w,c,n,x);

delete x;

delete w;

delete v;

return 0;}

0-1揹包問題的測試資料

5樓:

(1)in

100 5

77 92

22 22

29 87

50 46

99 90

out133

(2)in

200 8

79 83

58 14

86 54

11 79

28 72

62 52

15 48

68 62

out334

(3)in

300 10

95 89

75 59

23 19

73 43

50 100

22 72

6 44

57 16

89 7

98 64

out388

(4)in

1000 100

71 26

34 59

82 30

23 19

1 66

88 85

12 94

57 8

10 3

68 44

5 533 1

37 41

69 82

98 76

24 1

26 12

83 81

16 73

26 32

18 74

43 54

52 62

71 41

22 19

65 10

68 65

8 53

40 56

40 53

24 70

72 66

16 58

34 22

10 72

19 33

28 96

13 88

34 68

98 45

29 44

31 61

79 78

33 78

60 6

74 66

44 11

56 59

54 83

17 48

63 52

83 7

100 51

54 37

10 89

5 72

79 23

42 52

65 55

93 44

52 57

64 45

85 11

68 90

54 31

62 38

29 48

40 75

35 56

90 64

47 73

77 66

87 35

75 50

39 16

18 51

38 33

25 58

61 85

13 77

36 71

53 87

46 69

28 52

44 10

34 13

39 39

69 75

42 38

97 13

34 90

83 35

8 83

74 93

38 61

74 62

22 95

40 73

7 26

94 85

out2614

(5)in

1000 100

3 38

68 16

24 29

80 47

76 22

9 25

24 17

2 49

46 15

75 15

56 75

41 11

95 56

46 99

23 51

34 92

64 59

76 37

6 13

48 98

25 61

73 50

87 32

67 17

58 44

7 79

93 41

66 53

55 45

75 29

38 62

27 64

53 2

6 23

100 31

36 45

26 57

17 68

53 57

88 26

21 51

9 26

34 86

90 83

32 94

47 20

4 98

6 24

57 91

50 89

30 1

25 63

41 21

24 46

12 74

74 56

92 64

17 72

32 58

96 8

35 74

76 24

52 27

93 35

64 94

55 49

1 65

70 21

26 16

35 25

2 197 45

82 63

22 4

41 37

37 25

63 39

28 68

90 49

13 11

18 31

55 95

28 5

58 79

59 20

74 21

71 52

32 50

71 8

66 19

4 67

5 21

48 24

52 89

70 28

62 88

28 38

36 96

39 64

48 84

out2558

(6)in

1000 100

19 12

53 61

61 63

74 78

98 49

70 46

15 44

59 36

64 37

29 66

98 43

79 16

74 14

85 73

52 72

70 72

84 83

91 15

84 83

75 65

78 21

72 49

5 36

46 20

26 22

95 80

38 94

79 3

28 73

92 1

12 91

37 62

37 8

58 58

94 79

44 67

25 53

3 812 85

67 82

2 70

98 43

12 22

2 53

34 22

68 14

68 41

81 41

92 77

16 75

63 91

47 7

96 39

9 67

32 33

24 65

15 34

4 16

97 93

80 58

76 67

15 13

69 69

22 41

85 42

68 70

70 40

85 11

71 31

24 90

64 31

22 84

13 61

28 15

76 13

13 46

93 10

95 57

70 31

80 94

43 77

6 67

36 57

91 9

17 75

94 24

21 75

30 56

69 27

34 72

39 5

33 81

18 79

75 53

36 96

7 67

15 60

34 42

89 82

59 34

out2617

(7)in

1000 100

42 15

30 64

27 82

93 87

8 81

34 54

47 65

64 98

82 42

76 99

70 6

79 50

23 90

5 99

67 96

9 57

97 76

29 12

7 47

61 18

73 46

3 73

44 99

85 60

7 40

51 60

49 15

90 5

59 65

38 69

55 19

39 72

62 51

85 33

54 11

81 72

38 69

42 64

90 97

90 95

26 32

50 59

22 34

71 3

52 27

41 99

77 82

32 44

49 66

2 83

96 72

84 28

20 64

48 90

17 15

62 38

87 65

94 91

84 68

26 28

73 17

52 80

12 1

70 29

42 54

47 8

94 11

13 11

47 70

89 40

90 93

7 65

51 51

39 49

24 75

6 35

74 41

69 60

5 72

47 57

78 76

65 6

67 28

35 12

89 59

69 58

96 55

15 30

20 66

8 13

28 24

25 24

16 9

33 17

22 43

16 67

64 90

64 37

63 36

67 36

out2461

(8)in

1000 100

58 3

99 79

96 97

64 24

28 10

29 55

43 95

35 41

2 67

30 28

86 14

56 11

27 86

9 50

85 63

13 69

65 39

46 62

51 10

31 49

99 22

56 88

97 60

11 7

65 9

63 34

67 8

6 80

80 17

84 71

85 55

49 17

71 9

95 32

72 26

58 18

23 21

48 86

14 47

89 55

100 61

85 94

53 16

27 54

58 84

50 100

68 11

70 87

81 57

66 85

88 45

43 18

57 61

31 89

77 39

3 29

10 7

26 77

62 4

87 47

97 67

32 62

17 29

100 66

26 47

66 28

9 95

24 66

19 13

90 72

74 21

98 60

92 87

36 27

28 66

58 36

29 93

38 56

32 12

99 31

2 55

88 6

58 36

7 97

24 61

93 88

77 71

86 68

69 49

84 23

95 64

83 52

51 40

96 19

22 87

98 81

61 41

13 71

99 32

68 72

out2397

(9)in

1000 100

75 27

64 21

68 14

18 82

83 36

55 94

60 88

10 71

18 86

83 69

53 75

87 60

80 74

14 16

92 38

18 49

67 24

22 68

64 87

15 85

80 32

33 70

79 37

81 36

43 65

93 29

74 91

48 6

74 54

72 13

70 78

94 70

98 95

57 2

75 38

98 84

4 30

46 44

9 85

80 75

18 39

96 24

78 42

96 76

24 15

14 53

37 68

50 78

52 75

66 24

63 53

27 84

30 34

50 99

88 32

63 22

100 5

68 80

50 39

61 92

55 34

63 59

47 17

95 41

52 17

40 19

65 28

43 57

69 31

34 1

46 21

26 44

45 47

18 71

94 28

93 9

67 15

3 71

34 36

79 24

60 36

67 81

48 33

65 40

4 69

9 65

28 68

10 73

49 4

77 19

98 1

47 11

56 50

11 13

23 78

4 93

70 34

28 60

95 41

21 35

out2460

(10)

in1000 100

88 53

85 70

59 20

100 41

94 12

64 71

79 37

75 87

18 51

38 64

47 63

11 50

56 73

12 83

96 75

54 60

23 96

6 70

19 76

31 25

30 27

32 89

21 93

31 40

4 41

30 89

3 93

12 46

21 16

60 4

42 41

42 29

78 99

6 82

72 42

25 14

96 69

21 75

77 20

36 20

42 56

20 23

7 92

46 71

19 70

24 1

95 63

3 18

93 11

73 68

62 33

91 6

100 82

58 69

57 78

3 48

32 95

5 42

57 53

50 99

3 15

88 76

67 64

97 39

24 48

37 83

41 21

36 75

98 49

52 73

75 85

7 28

57 31

23 86

55 63

93 12

4 71

17 35

5 21

13 17

46 73

48 18

28 7

24 51

70 94

85 88

48 46

48 77

55 80

93 95

6 31

8 80

12 32

50 45

95 5

66 30

92 51

25 63

80 43

16 9

out2852

01揹包問題,關於C 01揹包問題

2.0 1揹包 一個旅行者有一個最多能用m公斤的揹包,現在有n件物品,它們的重量分別是w1,w2,wn,它們的價值分別為c1,c2,cn.若每種物品只有一件求旅行者能獲得最大總價值。1 分析說明 顯然這個題可用深度優先方法對每件物品進行列舉 選或不選用0,1控制 程式簡單,但是當n的值很大的時候不能...

揹包問題,跪求更正

你程式中主要問題有以下幾個 1 你這是揹包問題,可以放某物品的一部分,則最終價值不一定是整數,所以s為float型別。2 下在的程式段設計時有幾個錯誤,我修改了並加了註釋for n 1 n k n else if c 0 else cout 編號 cout 揹包價值為 t include struc...

關於揹包的說說,描寫揹包的句子

描寫揹包的句子 1 一個美包,更多的體現個人的品位和素質,衣服不出位沒關係,一個美包,瞬間扭轉你的形象。就那麼簡單,背與放,遊走於魅力之間。2.花而不俗,那自然不過的渾然天成,輕撫荔枝紋皮質的脈絡,每一個碰觸都有親切的踏實感直入我心。3.中性風格設計,強調了這個時代的主題思維,美麗不再是單純的美,柔...