纪念品分组 题解
2023-08-22 19:37:31
发布于:广东
21阅读
0回复
0点赞
这道题有一个条件,就是每组最多有两件纪念品,那么我们可以这样想,最大的加上最小的,如果超过上限,则最大的单独一组,再把第二大的加上最小的,如果没有超过上限,则两者为一组,再向内推进。
可设 i = 1, j = n; 假如 i<=j 按上述条件推进
#include<iostream>
#include<algorithm>
using namespace std;
const int M = 100000;
int w;
int n;
int a[M];
int main(){
cin>>w>>n;
for(int i = 1; i<=n; i++){
cin>>a[i];
}
sort(a+1, a+n+1);
int ans = 0;
int l = 1, r = n;
while(l<=r){
if(a[l]+a[r] <= w && l!=r){
ans++;
r--;
l++;
}
else{
ans++;
r--;
}
}
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个