#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { vector<int> price; int sum=0,w,n,temp,temp1; cin>>w>>n; for(int i=0;i<n;++i){ cin>>temp; price.push_back(temp); } sort(price.begin(),price.end()); while(!price.empty()){ //数组不为空是继续循环 temp=price.back(); //拿出最大值 for(int i=0;i<price.size();++i){ temp1=price[i]; if(i==price.size()-1){ //数组内只还剩最后一个数的情况 sum++; price.pop_back(); break; } else if(temp+temp1>w){ //当价值和超过最大值的情况 if(i!=0){ price.erase(price.begin()+i-1); price.pop_back(); sum++; break; } else{ //这时候i==0,说明最大的数和最小的数之和大于最大值,那么这个最大的数必须单独放在一个盒子里 price.pop_back(); sum++; break; } } else if(i==price.size()-2){ //最大的数和倒数第二大的数匹配的情况 price.pop_back(); price.pop_back(); sum++; break; } } } cout<<sum; return 0; }
原文:https://www.cnblogs.com/futu-/p/12306420.html