zoukankan      html  css  js  c++  java
  • 《算法十一》(背包问题)

    问题描述:

    2.问题分析:可以知道满足一个递归式

    定义:B(i, j):i代表还有几件商品可以偷

              j代表还剩下的背包空间是多少

     例如:

      如果是B(4,20)代表:有4件商品可以偷取,背包剩余空间还有20———>一系列计算————>26

     3.定义B数组:

    4.代码演示: 

    #include <iostream>
    #include <iomanip> 
    #include <math.h>
    #include <string.h>
    #define N 6 
    #define W 21 
    using namespace std;
    //B[i][j]:i代表还有几件商品可以偷
    //		  j代表还剩下的背包空间是多少 
    int B[N][W] = {0};
    int w[6] = {0, 2, 3, 4, 5, 9};//重量 
    int v[6] = {0, 3, 4, 5, 8, 10};//价值
    
    void beibao(){
    	int k, c;
    	for(k=1; k<N; k++){//5个商品 
    		for(c=1; c<W; c++){
    			if(w[k]>c){//第k件商品太重超过了背包空间c,不偷 
    				B[k][c] = B[k-1][c];
    			}else{
    				//偷第k件商品 
    				int value1 = B[k-1][c-w[k]] + v[k];
    				//不偷第k件商品 
    				int value2 = B[k-1][c];
    				B[k][c] = value1 >= value2 ? value1:value2;
    			} 
    		}
    	}
    }
    
    int main(void){
    	beibao();
    	cout << B[5][20] << endl;
    	return 0;
    } 
  • 相关阅读:
    GitHub Interesting Collection
    使用 CSS3 Flexible Boxes 布局
    消失的属性
    浅谈 JavaScript 模块化编程
    为你的 Javascript 加点咖喱
    软件测试
    osi七层模型
    3_Hydra(爆破神器)
    2_NC(瑞士军刀)
    1_HTTP协议详解
  • 原文地址:https://www.cnblogs.com/Whgy/p/12301413.html
Copyright © 2011-2022 走看看