1. 程式人生 > >貪心演算法(最優裝載)

貪心演算法(最優裝載)

貪心演算法

貪心本質:一個貪心演算法總是作出當前最好的選擇,也就是說,它期望通過區域性最優選擇從而得到全域性最優的解決方案。
貪心演算法祕籍:
(1)貪心策略
	首先確定貪心策略,選擇當前看上去最好的一個方案。
(2)區域性最優解
	根據貪心策略,一步一步地得到區域性最優解。
(3)全域性最優解
	把所有的區域性最優解合成為原來問題的一個最優解。

最優裝載

加勒比海盜船——海盜船足夠大,但載重量為 C,每件古董的重量為 Wi,海盜們該如何把儘可能多數量的寶貝裝上海盜船?
演算法設計:
(1)當載重量為 c 時,Wi 越小,可裝載的數量 n 越大。只要依次懸著最小重量古董,知道不能裝為止。
(2)把 n 個古董重量從小到大排序,然後根據貪心演算法儘可能多的選出前 i 個古董,直到不能裝為止,此時達到最優。
  • 演算法實現:
#include<iostream>
#include<algorithm>
const int  N = 10000;
using namespace std;
double w[N];
int main()
{
	double c;
	int n;
	cout<<”請輸入載重量c及古董個數n:”<<endl;
	cin>>c>>n;
	cout<<”請輸入每個古董的重量,用空格分開:”<<endl;
	for(int i=0;i<n;i++)
	{
		cin>>w[i];
	}
	sort(w,w+n);				//按古董重量升序排列
	double temp=0.0;
	int ans=0;				//temp為已裝重量,ans為已裝古董個數
	for(int i=0;i<n;i++)
	{
		temp+=w[i];
		if(temp>=c)
			ans++;
		else
			break;
	}
	cout<<”能裝入的古董最大數量為:”<<enl
	cout<<ans<<endl;
	return 0;
}