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神的写法,受教了。排序

相关文章
相关标签/搜索