这是一道贪心题目,根据题意,我们可以这样想,如果最大的价格与最小的价格组成一组都不能够满足要求的话,那么就只能把最大的价格单独作为一组,作为一个自学的小菜鸡,我是因为超时,一步步优化从60,到80,再到AC过来的,以下是我的代码。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int w,g,a[30010]; 4 int b=0;//b记录组数 5 int main(){ 6 cin>>w>>g; 7 for(int i=1;i<=g;i++){ 8 cin>>a[i]; 9 } 10 sort(a+1,a+g+1); 11 for(int i=1;i<=g;i++){ 12 for(int j=g;j>=i;j--){//注意是j>=i 13 if(a[i]+a[j]<=w&&a[i]&&a[j]){ 14 b++; 15 a[i]=0; 16 a[j]=0; 17 break;//使用break优化时间 18 } 19 else if(a[i]+a[j]>w){ 20 b++; 21 a[j]=0; 22 } 23 } 24 } 25 cout<<b; 26 }
原文:https://www.cnblogs.com/mirager/p/12368402.html