动态规划解决0/1背包问题

来源:互联网 发布:ubuntu游客创建新用户 编辑:程序博客网 时间:2024/05/17 08:56

动态规划,其实非常简单,求出递推式,基本上就ok了,自己写了一个动态规划解决0/1背包问题的算法,时间复杂度是n2,以下是代码:

public static void method(int M,int[] w,int p[]){
        int[][] c = new int[M+1][w.length];
        for(int i = 0;i<M;i++){
            c[i][0] = 0;
        }
        for(int i = 0;i<w.length;i++){
            c[0][i] = 0;
        }
        for(int i = 1;i<=M;i++){
            for(int j = 0;j<w.length;j++){
                    if(i==0||j==0) continue;
                    if(w[j]<i){
                    if(c[i][j-1]>(c[i-w[j]][j-1]+p[j])){
                        c[i][j] = c[i][j-1];
                    }else{
                        c[i][j] = c[i-w[j]][j-1]+p[j];
                    }
                    }else{
                        c[i][j] = c[i][j-1];
                    }
                System.out.println(i+" "+j+" "+c[i][j]);
            }
        }

 懂算法的人应该知道,递推式一出来无非就是写上几个if条件而已。

0 0