首页 > 编程语言 > 详细

0-1背包问题的动态规划解法之二位数组

时间:2020-07-27 23:56:22      阅读:80      评论:0      收藏:0      [点我收藏+]
 1 #include <iostream>
 2 using namespace std;
 3 
 4 int num[4] = { 2, 2, 4, 6 };
 5 int f()
 6 {
 7     bool state[5][6];  //在linux中注意用memset(state,false,sizeof(state))初始化;这里可以不用,因为自动被初始化为false
 8     state[0][0] = true;
 9 
10     for (int i = 1; i < 5; i++)   
11     {
12         for (int j = 0; j <=5; j++)    //物品不装入背包
13         {
14             if (state[i - 1][j] == true)
15                 state[i][j] = true;
16         }
17 
18         if (num[i] > 5)  //如果本物品重量超过可容纳重量,则继续下一个循环
19             continue;
20 
21         for (int j = 0; j <= 5 - num[i]; j++) //把物品装入背包
22         {
23 
24             if (state[i - 1][j] == true)
25                 state[i][j + num[i]] = true;
26         }
27     }
28 
29     for (int j = 5; j >= 0; j--)  //输出
30     {
31         if (state[4][j] == true)
32             return j;
33     }    
34     return 0;
35  }
36 
37  int main()
38  {
39      int i = f();
40      cout << i << endl;     
41      system("pause");
42      return i;
43  }

 

0-1背包问题的动态规划解法之二位数组

原文:https://www.cnblogs.com/kalzzz-thingg/p/13386866.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!