初識算法:貪心算法-最優裝載問題
最優裝載問題:有一輪船載重量爲c,集裝箱 i 的重量爲Wi,在裝在體積不受限制的情況下,將儘可能多的集裝箱裝上輪船。
貪心策略:集裝箱重量最輕的先裝
時間複雜度:T(n) = O(nlogn)
主要兩個階段:排序 -> 裝載
實例
問題描述:小明的表哥爲他推薦了一些學習計算機編程的的小視頻,這些視頻的播放時間長短不完全相同。現在給定一段時間,你能告訴小明他最多可以看多少個視頻嗎?(每個視頻的播放時間和給定的總時間均用分鐘爲單位)
輸入
單組輸入數據
第一行爲m n
m爲給定時間長度(分鐘)(0<n,m<=1000)
n表示視頻個數
接下來是n個整數代表每個視頻的播放時間(每個視頻播放時間爲不超過1000的正整數)
樣例輸入
84 6
65 46 18 76 79 3
輸出
輸出一個整數代表XP最多可以看的視頻數。
樣例輸出
3
#include<iostream>
#include<algorithm>
#define MAXN 1000005
using namespace std;
int w[MAXN];
int main()
{
int c,n;
int sum = 0;
int tmp = 0;
cin >> c >> n;
for(int i= 1; i <= n; ++i)
cin >> w[i];
sort(w+1,w+1+n);
for(int i = 1; i <= n; ++i)
{
tmp += w[i];
if(tmp <= c)
++sum;
else
break;
}
cout << sum << endl;
return 0;
}