1. 程式人生 > >貪心策略之最優裝載問題

貪心策略之最優裝載問題

問題:

海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件古董都價值連城,一旦打碎就失去了它的價值。雖然海盜船足夠大,但載重量為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”功能,因此開啟了丟失