南阳题目71-独木舟上的旅行
2016-04-10 22:21
190 查看
独木舟上的旅行
时间限制:3000 ms | 内存限制:65535 KB难度:2
描述
进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。
输入第一行输入s,表示测试数据的组数;
每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;
接下来的一组数据为每个人的重量(不能大于船的承载量);输出每组人数所需要的最少独木舟的条数。样例输入
385 65 84 85 80 84 8390 390 45 60100 550 50 90 40 60
样例输出
533
上传者
这题主要是考虑最优的情况,就是尽可能的让每个船上的重量都最接近所要求的最大载重,但不超过,我们直接排下序,然后从大向小来找最适合的,记得标记一下用过的。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int a,b; } s[10010]; bool cmp(node x,node y) { return x.a<y.a; } int main() { int m,n,i,j,k,w; scanf("%d",&m); while(m--) { scanf("%d%d",&w,&n); for(i=0;i<n;i++) { scanf("%d",&s[i].a); s[i].b=0; } sort(s,s+n,cmp); int cot=0; for(i=n-1;i>=0;i--) { if(s[i].b) continue; for(j=i-1;;j--) { if(s[j].b) continue; else if(s[i].a+s[j].a<=w) break; } if(j!=-1) { s[i].b=1; s[j].b=1; } else s[i].b=1; cot++; } printf("%d\n",cot); } return 0; }
相关文章推荐
- 20145225《Java程序设计》实验一 Java开发环境的熟悉(Linux + Eclipse)
- 学习进度条(第六周)
- 贪心算法专题总结
- LigerUI真假分页以及过滤查询功能
- java枚举的作用
- 递归查某文件
- 带编码表的读写
- java网页爬虫
- problemJ
- c混合运算和数据类型转换
- android --- 深入理解 JNI
- Android线程相关_Handler_Message_AsyncTask
- LineNumberReader练习
- *读文件 每一行倒序 写入另一文件 ArrayList
- 20145322第一次JAVA实验报告
- 求两个字符串的最长公共子序列
- 结构体的内存分配
- 字节流 自定义缓冲字节数组 读写文件
- 四个窗口卖票
- implements Runnable synchronized代码块 * 2个线程向同一数组中加随机数,每个数组加3个数,交替