連接:https://codeforces.com/contest/1119/problem/Bc++
題意:一個冰箱高h,給你n個瓶子,問最多能放幾個瓶子,要求按照題目所給的順序放瓶子,即[1,2,3,4,5],只能從1開始取,且瓶子只能放在隔板上。spa
思路:看了不少題解都用貪心+二分,直到我看了t神的代碼,簡潔明瞭,直接枚舉。因爲是按順序取瓶子,因此先取k個瓶子再排序,再根據貪心,相鄰的兩個瓶子放在同一層,每一層取較高的那一個,計算高度和code
代碼:blog
1 #include<bits/stdc++.h> 2 typedef long long ll; 3 const int M = int (1e5) + 5; 4 using namespace std; 5 6 int main() 7 { 8 int n,h; 9 cin>>n>>h; 10 vector<int> a(n); 11 for(int i=0;i<n;i++) cin>>a[i]; 12 for(int k=n;k>=0;k--) 13 { 14 vector<int> b(a.begin(),a.begin()+k); 15 sort(b.begin(),b.end()); 16 ll sum=0; 17 for(int i=int(b.size())-1;i>=0;i-=2) 18 sum+=b[i]; 19 if(sum<=h) 20 { 21 cout<<k<<endl; 22 return 0; 23 } 24 } 25 return 0; 26 }
備註:這裏的vector初始化方式是我以前沒有遇到過的,這也是t神的寫法,受教了。排序