- 使用从右向左逼近的思路去做。切左指针指向第一个元素,右指针指向第二个元素。如果二者之和小的话,那就都移动,当作放过了。如果二者之和大的话,那就之移动最大的。记住提前升序排序。
- 指针如果发生移动就证明这个货物已经放了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int x;
while(cin>>x){
int a;
vector<int> res;
while(cin>>a){
res.push_back(a);
}
int ans =0,temp =0;
sort(res.begin(),res.end());
int l = 0, r = res.size()-1;//从两边开始
while(r>=0&& l<=res.size()-1&& r>=l){
if(res[r]==x){
ans++;
r--;
}else if(res[l]+res[r]<=x){
ans++;
l++;
r--;
}else{
ans++;
r--;
}
}
cout<<ans<<endl;
}
return 0;
} 
京公网安备 11010502036488号