进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。
输入格式
第一行输入 s(1 \le s \le 10)s(1≤s≤10),表示测试数据的组数;
每组数据的第一行包括两个整数 ww,nn,80 \le w \le 200,1 \le n \le 30080≤w≤200,1≤n≤300,ww 为一条独木舟的最大承载量,nn 为人数;
接下来的一组数据为每个人的重量(不能大于船的承载量);
输出格式
每组人数所需要的最少独木舟的条数。
输出时每行末尾的多余空格,不影响答案正确性
样例输入复制
3
85 6
5 84 85 80 84 83
90 3
90 45 60
100 5
50 50 90 40 60
样例输出复制
5
3
3
这是一道常规题,代码如下,仅供参考:
#include<iostream>
#include<algorithm>
#include<memory.h>
using namespace std;
/*
@author :HaiRu,WU
@from:AHUT
*/
int main(){
int T;
cin >> T;
while(T--){
int w,n;
int max_n=400;
cin >> w>>n;
int weight[max_n];
bool mark[max_n];
memset(mark,false,sizeof(mark));
for(int i=0;i<n;i++){
cin >> weight[i];
}
sort(weight,weight+n);
int cnt=0;
for(int i=0;i<n;i++){
if(!mark[i]){
int num=w-weight[i];
mark[i]=true;
int j;
for(j=n-1;j>=0;j--){
if(!mark[j] && num>=weight[j]){
num=num-weight[j];
mark[j]=true;
break;
}
}
cnt++;
}
}
cout<<cnt<<endl;
}
return 0;
}