国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談java實現背包算法(0-1背包問題)

淺談java實現背包算法(0-1背包問題)

2020-12-19 14:52java林森 Java教程

本篇文章主要介紹了淺談java實現背包算法(0-1背包問題) ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

0-1背包的問題

背包問題(Knapsack problem)是一種組合優化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,我們如何選擇,才能使得物品的總價格最高。問題的名稱來源于如何選擇最合適的物品放置于給定背包中。

這是最基礎的背包問題,特點是:每種物品僅有一件,可以選擇放或不放。

用子問題定義狀態:即f[i][v]表示前i件物品恰放入一個容量為v的背包可以獲得的最大價值。則其狀態轉移方程便是:

f[i][v]=max{ f[i-1][v], f[i-1][v-w[i]]+v[i] }。

java" id="highlighter_727203">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public class Bag {
 
  static class Item {// 定義一個物品
    String id; // 物品id
    int size = 0;// 物品所占空間
    int value = 0;// 物品價值
 
    static Item newItem(String id, int size, int value) {
      Item item = new Item();
      item.id = id;
      item.size = size;
      item.value = value;
      return item;
    }
 
    public String toString() {
      return this.id;
    }
  }
 
  static class OkBag { // 定義一個打包方式
    List<Item> Items = new ArrayList<Item>();// 包里的物品集合
 
    OkBag() {
    }
 
    int getValue() {// 包中物品的總價值
      int value = 0;
      for (Item item : Items) {
        value += item.value;
      }
      return value;
    };
 
    int getSize() {// 包中物品的總大小
      int size = 0;
      for (Item item : Items) {
        size += item.size;
      }
      return size;
    };
 
    public String toString() {
      return String.valueOf(this.getValue()) + " ";
    }
  }
 
  // 可放入包中的備選物品
  static Item[] sourceItems = { Item.newItem("4號球", 4, 5), Item.newItem("5號球", 5, 6), Item.newItem("6號球", 6, 7) };
  static int bagSize = 10; // 包的空間
  static int itemCount = sourceItems.length; // 物品的數量
 
  // 保存各種情況下的最優打包方式 第一維度為物品數量從0到itemCount,第二維度為包裹大小從0到bagSize
  static OkBag[][] okBags = new OkBag[itemCount + 1][bagSize + 1];
 
  static void init() {
    for (int i = 0; i < bagSize + 1; i++) {
      okBags[0][i] = new OkBag();
    }
 
    for (int i = 0; i < itemCount + 1; i++) {
      okBags[i][0] = new OkBag();
    }
  }
 
  static void doBag() {
    init();
    for (int iItem = 1; iItem <= itemCount; iItem++) {
      for (int curBagSize = 1; curBagSize <= bagSize; curBagSize++) {
        okBags[iItem][curBagSize] = new OkBag();
        if (sourceItems[iItem - 1].size > curBagSize) {// 當前物品大于包空間.肯定不能放入包中.
          okBags[iItem][curBagSize].Items.addAll(okBags[iItem - 1][curBagSize].Items);
        } else {
          int notIncludeValue = okBags[iItem - 1][curBagSize].getValue();// 不放當前物品包的價值
          int freeSize = curBagSize - sourceItems[iItem - 1].size;// 放當前物品包剩余空間
          int includeValue = sourceItems[iItem - 1].value + okBags[iItem - 1][freeSize].getValue();// 當前物品價值+放了當前物品后剩余包空間能放物品的價值
          if (notIncludeValue < includeValue) {// 放了價值更大就放入.
            okBags[iItem][curBagSize].Items.addAll(okBags[iItem - 1][freeSize].Items);
            okBags[iItem][curBagSize].Items.add(sourceItems[iItem - 1]);
          } else {// 否則不放入當前物品
            okBags[iItem][curBagSize].Items.addAll(okBags[iItem - 1][curBagSize].Items);
          }
        }
 
      }
    }
  }
 
  public static void main(String[] args) {
    Bag.doBag();
    for (int i = 0; i < Bag.itemCount + 1; i++) {// 打印所有方案中包含的物品
      for (int j = 0; j < Bag.bagSize + 1; j++) {
        System.out.print(Bag.okBags[i][j].Items);
      }
      System.out.println("");
    }
 
    for (int i = 0; i < Bag.itemCount + 1; i++) {// 打印所有方案中包的總價值
      for (int j = 0; j < Bag.bagSize + 1; j++) {
        System.out.print(Bag.okBags[i][j]);
      }
      System.out.println("");
    }
 
    OkBag okBagResult = Bag.okBags[Bag.itemCount][Bag.bagSize];
    System.out.println("最終結果為:" + okBagResult.Items.toString() + okBagResult);
 
  }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/reachlins/p/6549504.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人免费一区二区三区视频软件 | 日韩视频网 | 欧美啪啪一区二区 | 亚洲精品麻豆 | 草久在线视频 | 国产精品亚洲视频 | 一区二区视频免费 | 国产精品久久久久久久久久久久午夜片 | 久久伊人精品 | 久久亚洲欧美日韩精品专区 | 台湾av在线 | 国产精品成人3p一区二区三区 | 91网站入口| 婷婷精品视频 | 欧美日韩在线视频免费 | 久久综合狠狠综合久久综合88 | 国产精品久久久久久久久久久久久久久久 | 久久精品一区二区三区四区 | 在线观看日韩 | 精品中文字幕一区 | 成人在线视频网站 | www久 | 91精品国产日韩91久久久久久 | 亚洲精品福利在线 | 久久久久久久一区 | 中文字幕在线精品 | 美国理论 | 国产精品jizz在线观看麻豆 | 亚洲成人免费网站 | 成人一区二区三区 | 日本电影网址 | 国产日韩欧美高清 | 久久精品电影 | 成人免费在线播放 | 亚洲精品乱码久久久久久麻豆不卡 | 亚洲一区视频在线 | 欧美成人精品一区二区三区 | 国产精品一区二区三区在线 | 久久免费精品 | 羞羞网站免费观看 | 精品在线一区二区三区 |