最優裝載問題


問題描述:
有一批集裝箱要裝上一艘載重量為c的輪船。其中集裝箱i的重量為Wi。最優裝載問題要求確定在裝載體積不受限制的情況下,將盡可能多的集裝箱裝上輪船。

編程任務: 對於給定的n個集裝箱和輪船的載重量C,編程計算裝入最多時的集裝箱個數。

輸入:
輸入由多組測試數據組成。每組測試數據輸入的第1行中有2個正整數n和C。正整數n是集裝箱個數;正整數C是輪船的載重量。接下來的一行中有n個整數,分別表示n個集裝箱的重量,它們之間用空格分隔。其中1<=n<=2000,所有正整數不超過231-1
輸出:
對應每組輸入,輸出的每行是計算出的裝入最多時的集裝箱個數。

樣例輸入:
4 5
3 5 2 1
樣例輸出:
2

解決:貪心算法入門題,其實代碼可以很短的,就是選擇最小的裝在里邊就行了,但是還是練習下記錄哪個裝入為好

 1 #include <iostream> 
 2 #include <algorithm> 
 3 #include <bitset> 
 4 using namespace std;  5 struct node  6 {  7     int id;  8     int val;  9 }; 10 node box[2005]; 11 int n,c; 12 bool operator <(const node &a,const node &b) 13 { 14     return a.val<b.val; 15 } 16 void greedySelect() 17 { 18     sort(box,box+n); 19     bitset<2005> b; 20  b.reset(); 21     for(int i=0;i<n;i++) 22      if(box[i].val <= c) 23  { 24           b[box[i].id]=1; 25           c-=box[i].val; 26  } 27      else break; 28      cout<<b.count()<<endl; 29 } 30 int main() 31 { 32     while(cin>>n>>c) 33  { 34         for(int i=0;i<n;i++) 35  { 36             box[i].id=i; 37             cin>>box[i].val; 38  } 39  greedySelect(); 40  } 41     return 0; 42 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM