题解
2026-03-26 18:41:30
发布于:广东
17阅读
0回复
0点赞
题解
这道题的话其实随便写写都写得出来
朴素的贪心策略:排序后,让最轻和最重尽量拼船,不能拼就让最重单独一条船,用双指针模拟这个过程,统计最少船数
具体请看VCR(-)
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 3e5 + 10;//数据范围适当调整
int t[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
//上面的加速爱写不写
int w, n;
cin >> w >> n; //载重、人数
for( int i = 1 ; i <= n ; i++ ){
cin >> t[i];
}
//从小到大排序
sort( t + 1 , t + n + 1 );
int l = 1 , r = n;//左,右指针
int cnt = 0;//独木舟数量
while( l <= r ){
//最轻 + 最重
if( t[l] + t[r] <= w ){
l++;//最轻的人已上船
}
r--;//最重的人已上船
cnt++;//用掉一艘船
}
cout << cnt << endl;
return 0;
}
我只是个新手,大佬勿喷啊QAQ
这里空空如也





有帮助,赞一个