- 使用从右向左逼近的思路去做。切左指针指向第一个元素,右指针指向第二个元素。如果二者之和小的话,那就都移动,当作放过了。如果二者之和大的话,那就之移动最大的。记住提前升序排序。
- 指针如果发生移动就证明这个货物已经放了。
#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; }