M18211: 军备竞赛
greedy, two pointers, http://cs101.openjudge.cn/pctbook/M18211
思路:需要注意到可以存在没有被制造也没有被卖掉的图纸
cpp
#
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
int n,a;
cin>>n;
vector<int> vec;
while(cin>>a){
vec.push_back(a);
}
int m=vec.size()-1;
vector<int> sum(m+1);
sort(vec.begin(),vec.end());
if(n<vec[0]){
cout<<0;
return 0;
}
sum[0]=vec[0];
for(int i=1;i<=m;i++){
sum[i]=sum[i-1]+vec[i];
}
int id=0;
for(int j=0;j<m;j++){
for(int i=0;i<=m;i++){
if(sum[i]>n+sum[m]-sum[m-j]){
id=max(id,i-j);
break;
}
}
}
cout<<id<<'\n';
return 0;
}