1. 程式人生 > >貪心算法之乘船問題

貪心算法之乘船問題

() str -- while main 兩個 sin i++ pac

有n個人,第i個人的重量為w[i],每艘船的最大載重量均為c,且最多只能乘兩個人。用最少的船裝載所有人。

思路:從最輕的開始考慮,讓最輕的和最重的一條船,若超出重量則可判定最重的只能一人一條船

代碼:

#include <iostream>
#include <algorithm>

using namespace std;

int n,m;
int a[100];

int main()
{
    cin>>n>>m;//n為人數,m為一條船的最大承重
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a
+1,a+n+1); int i=1,j=n; int ans=0; while(i<j) { if(a[i]+a[j]>m) j--; else { i++; j--; ans++; } } cout<<ans+n-2*ans<<endl; return 0; }

貪心算法之乘船問題