• 0-1背包问题


    //动态规划求解背包问题
    public
    class Dynamic{ static int[] weight = new int[]{2, 2, 4, 6, 3}; static int n = 5; static int m = 9; static int maxW = 0; public static void dynamic(){ boolean[][] result = new boolean[n][m + 1]; result[0][0] = true; result[0][weight[0]] = true;
      
    for(int i = 1; i < n; i++){
        //不装入背包
    for(int j = 0; j <= m; j++){ if(result[i - 1][j] == true){ result[i][j] = true; } }
        //装入背包
    for(int j = 0; j <= m - weight[i]; j++){ if(result[i - 1][j] == true){ result[i][j + weight[i]] = true; } } } print_result(result); } public static void print_result(boolean[][] result){ for(int i = 0; i < n; i++){ for(int j = 0; j < m + 1; j++){ if(result[i][j] == true){ System.out.print("1 "); } else{ System.out.print("* "); } } System.out.println(); } } public static void main(String[] argv){ dynamic(); } }

    输出结果:

    1 * 1 * * * * * * *
    1 * 1 * 1 * * * * *
    1 * 1 * 1 * 1 * 1 *
    1 * 1 * 1 * 1 * 1 *
    1 * 1 1 1 1 1 1 1 1

    回溯算法:

    // 回溯算法实现
    private int maxW = Integer.MIN_VALUE; // 结果放到 maxW 中
    private int[] weight = {2,2,4,6,3};  // 物品重量
    private int n = 5; // 物品个数
    private int w = 9; // 背包承受的最大重量
    public void f(int i, int cw) { // 调用 f(0, 0)
      if (cw == w || i == n) { // cw==w 表示装满了,i==n 表示物品都考察完了
        if (cw > maxW) maxW = cw;
        return;
      }
      f(i+1, cw); // 选择不装第 i 个物品
      if (cw + weight[i] <= w) {
        f(i+1,cw + weight[i]); // 选择装第 i 个物品
      }
    }
  • 相关阅读:
    装箱与拆箱
    java中final的用法
    一次坑爹的Oracle in查询
    Spring-Security-Oauth整合Spring-Security,拦截器
    jvisualvm连接远程Tomcat
    7.Spring-Cloud服务容错保护之Hystrix初探
    8.Spring-Cloud-Hystrix之异常处理
    9.Spring-Cloud-Hystrix之请求缓存(踩坑)
    10.Spring-Cloud-Hystrix之熔断监控Hystrix Dashboard单个应用
    11.Spring-Cloud-Hystrix之熔断监控Turbine
  • 原文地址:https://www.cnblogs.com/zzdbullet/p/10913107.html
Copyright © 2020-2023  润新知