独木舟上的旅行
2015-09-23 13:12
176 查看
独木舟上的旅行
描述
进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。输入
第一行输入s,表示测试数据的组数;每组数据的第一行包括两个整数w,n,80<=w<=200,1<=n<=300,w为一条独木舟的最大承载量,n为人数;
接下来的一组数据为每个人的重量(不能大于船的承载量);
输出
每组人数所需要的最少独木舟的条数。样例输入
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> using namespace std; int s,w,n,weights[301]; void quickSort(int low,int high) { int i = low,j = high; int pivot = weights[(low+high)/2]; while(i <= j) { while(weights[i] < pivot) i++; while(weights[j] > pivot) j--; if(i <= j) { int temp = weights[i]; weights[i] = weights[j]; weights[j] = temp; i++; j--; } } if ( j > low) quickSort(low,j); if (i < high) quickSort(i,high); } void work(int w,int n) { int sum = 0; int i,j; for (i = 1,j = n; i < j;) { if(weights[i] + weights[j] <= w) { sum ++; i++; j--; } else { sum++; j--; } } if(i == j) sum ++; cout << sum << endl; } int main() { cin >> s; for (int i = 1;i <= s;i++) { cin >> w >> n; for (int j = 1;j <= n;j++) cin >> weights[j]; quickSort(1,n); work(w,n); } return n; }
相关文章推荐
- A1101. Quick Sort (25)
- matlab的元胞和结构体
- linux在构建SVNserver
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 【读书笔记】架构是最高层次的规划和难以改变的决定
- ubuntu学习笔记-sudo/gedit
- 笔记08 WPF导航
- Navicat Premium 11.0.17 32位+64位 简体中文破解版(多重数据库管理工具)
- 高性能MySQL
- 通过Mongo, Docker和Rancher创建Node.js应用集群
- Makefile 管理
- css优先级和四种接入方式
- 天声人語 20150923
- Mac 系统中 webgl 使用 FrameBuffer 效率更高
- Android的分页加载和分批加载
- 字符串匹配算法
- 算法导论11.2散列表 练习总结
- Hybrid----U采用IWebView演出PDF和其他文件
- 字符串匹配算法
- 小强的HTML5移动开发之路(12)——从一个多媒体标签说起