题解
2023-03-12 09:43:22
发布于:江苏
143阅读
0回复
0点赞
首先我们要想:怎么才能使这些分配方式尽量平均呢?
我们来列一个表.
原来的数据 | 1 | 3 | 2 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
进行排序后的数据 | 1 | 2 | 3 | 4 | 5 | 6 |
然后我们把1和6,2和5,3和4配对起来,此时他们的和都是相同的,并且做到了最少的分组!
但是事实是如此吗?
如果排序后的最大价值是 10,而数据是1,4,7,10,此时1+10就过大了!
怎么办?
很简单!只要把10单独放一组,1和下一个符合要求的数字一组就行了!
上代码
#include <bits/stdc++.h>
using namespace std;
int w,n,idx,ans,x;//w<=200,n<=30000
int P[30005];
int main(){
cin>>w>>n;
for (int i=0;i<n;i++){
cin>>P[i];
}
sort(P,P+n);
idx=n;
while (x<=idx){
if (P[x]+P[idx]<=w){
x++;
idx--;
ans++;
}
else{
idx--;
ans++;
}
}
cout<<ans-1;
return 0;
}
这里空空如也
有帮助,赞一个