Codeforces Global Round 2 B. Alyona and a Narrow Fridge

連接: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神的寫法,受教了。排序

相關文章
相關標籤/搜索