monsoonzeng 发表于 2013-1-27 06:02:11

动态规划解0-1背包问题

java 代码
<div class="dp-highlighter"><div class="bar" />   
[*]/**     
[*] *      
[*] */     
[*]<span />package com.zyf;      
[*]     
[*]<span />/**     
[*] * @author zyf 题目:给定n个物体,其中第i个物体重量wi,价值vi ,另有一个最大载重W的背包,往里面塞东西使得总价值尽可能大     
[*] *      
[*] * 令f(i,j)表示用前i个物体装出重量为j的组合时的最大价值      
[*] * f(i,j)=max{f(i-1,j), f(i-1, j-w)+v } ,i>0, j>=w;      
[*] * f(i,j) = f(i-1,j) , i>0, j<w;      
[*] * f(0,j) = v , i=0, j>=w;      
[*] * f(0,j) = 0, i=0, j<w;     
[*] *      
[*] */     
[*]<span />public class bagPro {      
[*]     
[*]    /**     
[*]     * @param args     
[*]     */     
[*]    public static void main(String[] args) {      
[*]        // TODO 自动生成方法存根      
[*]              
[*]              
[*]        int w[] = {2,2,6,5,4};      
[*]        int v[] = {6,3,5,4,6};      
[*]        int c = 10;      
[*]        int f[][] = new int ;             
[*]              
[*]        int maxValue = 0;      
[*]              
[*]        for(int j=0 ; j<=c; j++){      
[*]            if(j>=w)      
[*]                f =v;      
[*]            else       
[*]                f = 0;      
[*]        }      
[*]              
[*]        for(int i=1; i<w.length; i++){      
[*]            for(int j=0; j<=c;j++){      
[*]                if(j<w)      
[*]                    f = f;      
[*]                else if(f>=f]+v)      
[*]                    f = f;      
[*]                else     
[*]                    f = f]+v;      
[*]            }      
[*]        }      
[*]              
[*]        System.out.println(f);      
[*]              
[*]              
[*]              
[*]     
[*]    }      
[*]}   
页: [1]
查看完整版本: 动态规划解0-1背包问题