欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 數(shù)據(jù)結構與算法系列精講之背包問題

 更新時間:2022年02月18日 09:30:11   作者:我是小白呀  
背包問題是一個非常典型的考察動態(tài)規(guī)劃應用的題目,對其加上不同的限制和條件,可以衍生出諸多變種,若要全面理解動態(tài)規(guī)劃,就必須對背包問題了如指掌

概述

從今天開始, 小白我將帶大家開啟 Java 數(shù)據(jù)結構 & 算法的新篇章.

動態(tài)規(guī)劃

動態(tài)規(guī)劃 (Dynamic Programming) 的核心思想是把大問題劃分為小問題進行解決. 先求解子問題, 然后從這些子問題的解得到原問題的解.

動態(tài)規(guī)劃的優(yōu)點:

  • 可以幫助我們解決多階段問題, 化繁為簡

動態(tài)規(guī)劃的缺點:

  • 沒有統(tǒng)一的處理方法, 具體問題具體分析
  • 當變量的維數(shù)增大時, 計算和存儲會急劇增大

背包問題

背包問題 (Knapsack Problem) 指有 N 件物品和一個容量為 V 的背包. 第 i 件物品的費用是 c[i],價值是 w[i]. 求解將哪些物品裝入背包可使價值總和最大.

代碼實現(xiàn)

public class 背包問題 {

    public static void main(String[] args) {

        int[] w = {1, 2, 3};  // 物品重量
        int[] val = {6, 10, 12};  // 物品價值
        int m = 5;  // 背包容量
        int n = val.length;  //

        // 創(chuàng)建二維數(shù)組
        int[][] v = new int[n + 1][m + 1];

        // 將第一行和第一列賦值為0
        for (int i = 0; i < v.length; i++) {
            v[i][0] = 0;
        }

        for (int i = 0; i < v[0].length; i++) {
            v[0][i] = 0;
        }

        // 動態(tài)處理
        for (int i = 1; i < v.length; i++) {
            for (int j = 1; j < v[0].length; j++) {


                if (w[i - 1] > j) {
                    // 不裝入背包
                    v[i][j] = v[i - 1][j];
                } else {
                    // 裝入背包
                    v[i][j] = Math.max(v[i - 1][j], val[i - 1] + v[i - 1][j - w[i - 1]]);
                }
            }
        }

        // 輸出二維數(shù)組
        for (int i = 1; i < v.length; i++) {
            for (int j = 1; j < v[0].length; j++) {
                System.out.print(v[i][j] + "\t");
            }
            System.out.println();
        }
    }
}

輸出結果:

6 6 6 6 6
6 10 16 16 16
6 10 16 18 22

到此這篇關于Java 數(shù)據(jù)結構與算法系列精講之背包問題的文章就介紹到這了,更多相關Java 背包問題內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java使用DateTimeFormatter格式化輸入的日期時間

    Java使用DateTimeFormatter格式化輸入的日期時間

    這篇文章主要介紹了Java使用DateTimeFormatter格式化輸入的日期時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Mybatis批量更新三種方式的實現(xiàn)

    Mybatis批量更新三種方式的實現(xiàn)

    這篇文章主要介紹了Mybatis批量更新三種方式的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • java使用PageInfo的list通用分頁處理demo

    java使用PageInfo的list通用分頁處理demo

    這篇文章主要為大家介紹了java使用PageInfo的list通用分頁處理demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2023-12-12
  • spring boot--從controller到DAO操作

    spring boot--從controller到DAO操作

    這篇文章主要介紹了spring boot--從controller到DAO操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 分享一個簡單的java爬蟲框架

    分享一個簡單的java爬蟲框架

    這篇文章主要介紹了分享一個簡單的java爬蟲框架,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 初識Spring Boot框架和快速入門

    初識Spring Boot框架和快速入門

    這篇文章主要介紹了初識Spring Boot框架學習,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • java?集合工具類Collections及Comparable和Comparator排序詳解

    java?集合工具類Collections及Comparable和Comparator排序詳解

    這篇文章主要介紹了java集合工具類Collections及Comparable和Comparator排序詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Springboot?maven項目配置文件覆蓋問題的處理

    Springboot?maven項目配置文件覆蓋問題的處理

    這篇文章主要介紹了Springboot?maven項目配置文件覆蓋問題的處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 簡單談談Spring Ioc原理解析

    簡單談談Spring Ioc原理解析

    學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對于初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spring Ioc的理解。
    2018-09-09
  • 把Java程序轉換成exe,可直接運行的實現(xiàn)

    把Java程序轉換成exe,可直接運行的實現(xiàn)

    這篇文章主要介紹了把Java程序轉換成exe,可直接運行的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論