skyke

求真求实,大气大为!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

本文来自于《算法导论》中动态规划学习笔记。

 JAVA实现:

import java.util.Arrays;

public class CutRod {
    public static void cutRod(int[] p, int n, int[] r, int[] s) {
        r[0] = 0;
        s[0] = 0;
        for (int i = 1; i <=n ; i++) {
            int q = Integer.MIN_VALUE;
            for (int j = 1; j <= i ; j++) {
                if (q < p[j] + r[i-j]) {
                    q = p[j] + r[i-j];
                    s[i] = j;
                }
            }
            r[i] = q;
        }
    }

    public static void printCutSolution(int[] s, int n) {
        while (n > 0) {
            System.out.print(s[n] + " ");
            n -= s[n];
        }
    }

    public static void main(String[] args) {
        int n = 10;
        int[] p = {0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
        int[] r = new int[n+1];
        int[] s = new int[n+1];
        cutRod(p, n, r, s);
        System.out.println(Arrays.toString(r));
        System.out.println(Arrays.toString(s));
        printCutSolution(s, 7);
    }
}

 

posted on 2018-10-06 22:16  skyke  阅读(138)  评论(0编辑  收藏  举报