题解 | A69.纪念品分组
2026-03-29 21:52:01
发布于:广东
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int w , n , a[30010];
int main(){
cin >> w >> n; //存储
for(int i = 1;i <= n;i++){
cin >> a[i]; //存储
}
sort(a+1,a+n+1); //升序排序
int i = 1 , j = n , sum = 0; //i为最小的价格,j为最大的价格,sum为分组数目
while(i <= j){ //开始分组
if(a[i]+ a[j] <= w){ //如果最小的价格和最大的价格的和小于等于每组纪念品价格之和的上限时
i++; //最小的价格+1
j--; //最大的价格-1
sum++; //分组数目+1
}
else{ //如果最小的价格和最大的价格的和大于每组纪念品价格之和的上限时
j--; //最大的价格-1
sum++; //分组数目+1
}
}
cout << sum; //输出分组数目
return 0;
}
这是一道很经典的双指针题目
这里空空如也


有帮助,赞一个