算法之动态规划--0、1背包

来源:互联网 发布:狐狸那时已是猎人知乎 编辑:程序博客网 时间:2024/06/07 07:51

经典的盗贼问题:
一个盗贼带着一个背包去偷东西,房中有五件物品:
1: 6公斤 48元
2:5公斤 40元
3:2公斤 12元
4:1公斤 8元
5:1公斤 7元
但是他的背包只能装下8攻击的东西 问他该怎样选择保障拿到的东西价值最大。
思路:
使用动态规划来实现,
1.将物品i 放到背包里面,修改选择标志
2.判断是否超重,如果没超重,继续第一步,如果超重,将该物品排除在方案之外,判断此时未排除的物品的总价值是否小于已有最大值;如果满足,则不必再尝试或许物品。
代码:

package 动态规划;class  This{    double value;//价值    double weight;//重量    char isSelect;//记录是否已经选择了}public class Test {     static double maxvalue;    static  double totalvalue;    static double  maxwt;    static int num;    static char[] seltemp;    static void backpack(This[] goods,int i ,double wt,double vt){        int k;        if(wt+goods[i].weight <= maxwt){            seltemp[i]  = 1;            if(i < num-1){                backpack(goods,i+1,wt+goods[i].weight,vt);            }            else{                for(k=0;k<num;k++){                    goods[k].isSelect = seltemp[k];                }                maxvalue = vt;            }        }        seltemp[i] = 0;        if(vt - goods[i].value >maxvalue){            if(i <num -1){                backpack(goods , i+1,wt,vt - goods[i].value);            }            else{                for(k = 0;k< num;k++){                    goods[k].isSelect = seltemp[k];                }                maxvalue = vt - goods[i].value;            }        }}    public static void main(String[] args){        //test;    }}
0 0
原创粉丝点击