题意:给一些物品item[],这些物品的重量在101至300之间,要将这些物品全部放进若干个bins中,已知bins盛的重量为300,可以将bins装满也可以不装满,
问放这些物品最少需要几个bins.
思路:当时把最关键的地方忽略了,就是物品的重量在101至300之间,这就说明每个bins至多放2个物品。然后从小到大排序,倒着贪心就可以了。


1 #include<stdio.h> 2 #include<stack> 3 #include<string.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<vector> 7 using namespace std; 8 9 class BinPackingEasy 10 { 11 private: 12 int count; 13 public: 14 int minBins(vector <int> item) 15 { 16 count = 0; 17 int j; 18 int len = item.size(); 19 int vis[len+10]; 20 memset(vis,0,sizeof(vis)); 21 sort(item.begin(),item.end()); 22 for(int i = len-1; i >= 1; i--) 23 { 24 if(vis[i]) continue; 25 vis[i] = 1; 26 for(j = i-1; j >= 0; j--) 27 { 28 if(item[i] + item[j] <= 300 && !vis[j]) 29 { 30 vis[j] = 1; 31 count++; 32 break; 33 } 34 } 35 if(j == -1) 36 count++; 37 } 38 for(int i = 0; i < len; i++) 39 if(!vis[i]) 40 count++; 41 return count; 42 } 43 };