0
点赞
收藏
分享

微信扫一扫

dp算法 优化 在优化

洒在心头的阳光 2022-02-12 阅读 76
    public static int process(int[] arr,int index,int rest){
        if(index == arr.length){
            return rest == 0 ? 1 : 0;
        }

        int ways = 0;
        for(int zhang = 0;arr[index] * zhang <= rest;zhang++){
            ways += process(arr,index+1,rest-arr[index]*zhang);
        }
        return ways;
    }
   
   优化后
   public static int way2(int[] arr,int aim){
        if(arr == null || arr.length == 0){
            return 0;
        }
        int N = arr.length;
        int[][]  dp = new int[N+1][aim+1];
        dp[N][0] = 1;
        for(int index = N-1;index >= 0;index--){
            for(int rest = 0;rest <= aim;rest++){
                int ways = 0;
                for(int zhang = 0;arr[index]* zhang <= rest;zhang++){
                    ways = dp[index+1][rest-arr[index]*zhang];
                }
                dp[index][rest] = ways;
            }
        }
        return dp[0][aim];
    }

    public static int way3(int[] arr,int aim){
        if(arr == null || arr.length == 0){
            return 0;
        }
        int N = arr.length;
        int[][]  dp = new int[N+1][aim+1];
        dp[N][0] = 1;
        for(int index = N-1;index >= 0;index--){
            for(int rest = 0;rest <= aim;rest++){
                dp[index][rest] = dp[index+1][rest];
                if(rest - arr[index] >= 0){
                    dp[index][rest] += dp[index][rest-arr[index]];
                }
            }
        }
        return dp[0][aim];
    }
举报

相关推荐

0 条评论