貪心策略之最優裝載問題
問題:
海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件古董都價值連城,一旦打碎就失去了它的價值。雖然海盜船足夠大,但載重量為C,每件古董的重量為w,海盜們該如何把儘可能多數量的寶貝裝上海盜船呢?
看到問題後,得知,海盜船的載重量為C,每件古董的重量為w。
船的容量是固定的,那麼優先把重量小的古董先裝入,則可以儘可能多裝入古董數量。
演算法思路:
一,將重量為w的古董,按照重量升序排序,即由小到大排序。
二,從小到大裝入容量為C的船,知道不能裝入為止。
程式碼,直接貼上,java.
public static int loadNumber(int[] arr, int c){ //引數檢查 if(arr == null || c < 0) return -1; //裝入古董數 int count = 0; //當前容量 int temp = 0; for(int i = 0; i < arr.length; i++){ temp += arr[i]; if(temp <= c){ count++; } } return count; } public static void main(String[] args) { int n; //容量 int c; Scanner in = new Scanner(System.in); System.out.println("輸入搶到的古董數:"); n = in.nextInt(); System.out.println("輸入船的容量:"); c = in.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++){ System.out.println("輸入第" + (i + 1) + "古董的重量"); arr[i] = in.nextInt(); } //排序 Arrays.sort(arr); System.out.println("排序後陣列:" + Arrays.toString(arr)); int count = loadNumber(arr, c); System.out.println("裝入古董數:" + count); }
講到這裡:loadNumber方法還有第二種實現:
/** * 實現二 */ public static int loadNumber2(int[] arr, int c){ //引數檢查 if(arr == null || c < 0) return -1; //記錄已經裝載的古董數 int count = arr.length; //當前容量 int temp = 0; for(int i = 0, len = arr.length; i < len; i++){ temp += arr[i]; if(temp >= c){ //剛好滿,最後一個可以裝入 if(temp == c){ count = i + 1; }else{ //大於,則最後一個不可裝入 count = i; } break; } } return count; }
相關推薦
貪心策略之最優裝載問題
問題:海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件古董都價值連城,一旦打碎就失去了它的價值。雖然海盜船足夠大,但載重量為C,每件古董的重量為w,海盜們該如何把儘可能多數量的寶貝裝上海盜船呢?看到問題後
演算法之最優裝載
1.問題描述:有一批集裝箱要裝上一艘載重量為c的輪船,其中集裝箱i的重量為wi。最優裝載問題要求在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 該問題可以形式化描述為: 式中xi=0表示不裝入集裝箱i,xi=1表示裝入集裝箱i。 2.問題分析:因為體積不受限制,每個集裝箱除重量外
貪心演算法(最優裝載)
貪心演算法 貪心本質:一個貪心演算法總是作出當前最好的選擇,也就是說,它期望通過區域性最優選擇從而得到全域性最優的解決方案。 貪心演算法祕籍: (1)貪心策略 首先確定貪心策略,選擇當前看上去最好的一個方案。 (2)區域性最優解 根據貪心策略,一步一步地得到區域性最優解。 (3)全域
高效演算法設計_貪心法(最優裝載問題,部分揹包問題,乘船問題)
最優裝載問題 題目:有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。 輸入: 100 6 100 20 25 25 20 20 輸出: 20 20 20 25 25 100 1 1 1 1 0 0 思路:最優裝載問題要求確定在
貪心之最優服務次序
i++ str algo vector CI urn () span namespace 代碼: 1 #include <cstdio> 2 #include <algorithm> 3 #include <iostream>
貪心演算法-最優裝載問題
最優裝載問題。給出n個物體,第i個物體重量為w[i]。選擇儘量多的物體,使得總重量不超過C。 【分析】 由於只關心物體的數量,所有裝重的沒有裝輕的划算。只需把所有物體按重量從小到大排序,一次選擇每個物體,直到裝不下為止。這是一種典型的貪心演算法,只顧眼前,但能得到最優解。 -
貪心-最優裝載問題
有一批集裝箱,要裝上一艘載重量為c的輪船。其中集裝箱i的重量為wi。 最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 最優裝載問題問題的形式描述: •問題的形式描述是:給定c>0,wi>0,1≤i≤n,求n元0-1向量 &nb
貪心演算法——加勒比海盜:最優裝載問題
問題描述: 有一天,海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件古董都價值連城,一旦打碎就失去了它的價值。雖然海盜船足夠大,但載重量為C,每件古董的重量為wi,海盜們該如何把儘可能多數量的寶貝裝上
貪心-最優裝載
有一批集裝箱,要裝上一艘載重量為c的輪船。其中集裝箱i的重量為wi。 最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 最優裝載問題問題的形式描述: •問題的形式描述是
最優裝載問題(貪心)
問題簡述:給出n個物體,第i個物體重量為wi。選擇儘量多的物體,是的總重量不超過C。 分析:最簡單的一種了,排序,依次選擇每一個物體,直到無法裝下為止。 附程式碼如下: #include <bits/stdc++.h> using namespace std;
最優裝載問題(貪心基礎)
最優裝載問題。給出n個物體,第i個物體重量為w[i]。選擇儘量多的物體,使得總重量不超過C。 【分析】 由於只關心物體的數量,所有裝重的沒有裝輕的划算。只需把所有物體按重量從小到大排序,一次
貪心演算法——最優裝載問題
有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為wi。最優裝載問題要求在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 貪心策略: 重量最輕者優先裝載。 程式碼: #include <iostream> #include <al
最優裝載問題_貪心演算法
有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 問題可以描述為: 該問題可以用貪心演算法求解,要使用貪心演算法解決問題,我們必須先證明:(1)該問題具備
演算法java實現--貪心演算法--最優裝載問題
最優裝載問題演算法的java實現(貪心演算法) 具體問題描述以及C/C++實現參見網址 /** * 最優裝載問題(貪心演算法) * @author Lican * */ public class BestLoading { public float load
最優裝載(部分揹包問題,貪心,c++)
最優裝載 總時間限制: 1000ms 記憶體限制: 65536kB 描述 給定一個最大載重量為M的卡車和N種食品,有食鹽,白糖,大米等(假設它們都是散裝且大貨車只受重量限制不受體積限制)。已知第i種食品的最多擁有Wi公斤,其商品價值為Vi元/公斤,程式設計
最優裝載(貪心演算法)
演算法設計例題:最優裝載(貪心) memory limit: 32768KB time limit: 1000MS accept: 24 submit: 68 Description 有一批集裝箱要裝上一艘載重量為C的輪船。其中集裝箱i的重量為wi。最
貪心演算法 最優裝載問題
轉自:http://blog.csdn.net/fightingform/article/details/28912983 有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。
最優裝載問題(貪心法)
問題描述: 有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。 問題可以描述為: 式中,變數xi = 0 表示不裝入集裝箱 i,xxi = 1 表示裝入集裝箱 i。
最優裝載問題
部分背包 div tmp ++ 簡單 lse sin pan ret 這個問題比部分背包問題還簡單,先拿輕的再拿重的可以保證最後物品裝的最多。代碼如下: 1 #include<iostream> 2 #include<algorithm> 3
貪心演算法之最大的子組合求解
本來博主是沒有心情寫這篇部落格了,因為昨天住的地方遭賊了。半夜兩點多,偷開我家窗戶,把博主臥室裡面的玫瑰金給偷走了。當時博主就睡得特別不舒服,半夜醒來就發現手機被偷了。搞得博主後半夜基本沒有睡,萬幸的是,博主的手機開了“查詢iphone”功能,因此開啟了丟失