牛客网校招风暴周-运石头
来源:互联网 发布:sql关联查询性能 编辑:程序博客网 时间:2024/05/18 01:53
题目要求:
给定车子每次运送物体的最大质量,现将一堆石头从起点运到目的地,使得车子运送的趟数最少。输入数据第一行是车子的容量,第二行是石头的数量,第三行是每个石头的重量,例如:
10(车子单趟最大载重量)
9(石头数量)
1 3 5 7 9 10 8 6 4(每个石头的重量)
5
10 10 10 10 10
输出:
6
5
题目分析:
我们先将这些石头的重量全部相加,就像示例sum{1 3 5 7 9 10 8 6 4}=53,每趟车子最大的载重量为10个单位,那么车子运送趟数t在[(sum/load),N]之间,其中load为车子的最大载重量,sum为所有需要运送石头的重量之和,N为需要运送的石头的个数,(sum/load)表示将它们的商向上取整。对于每次运送,我们采用贪心策略,每次选取和当前可容纳质量最相近且不超过当前可容纳质量的石头装入。
代码:#include<iostream>#include<vector>#include<list>#include<fstream>#include<string>#include<set>#include<map>#include<algorithm>using namespace std;class solution{public:int min_load_time(vector<int>&load, vector<bool>&flag,int capacity){vector<vector<int>>total;vector<int>single;total.clear();single.clear();int size = load.size();int now = capacity,mark;count = 0;number = size;while (number){int min = INT_MAX;mark = -1;for (int i = 0; i < size; i++){if (flag[i] == false && load[i] <= now && now - load[i]<min){min = now - load[i];mark = i;}}if (mark == -1){//没有可装入车子的石头count++; //增加一趟车子now = capacity;total.push_back(single);single.clear();continue;}else{flag[mark] = true;now = now - load[mark];number--;single.push_back(load[mark]);if (now == 0||number==0){count++;now = capacity;total.push_back(single);single.clear();}}}return count;}int count;int number;};int main(){int num,temp,capacity;vector<int>load;vector<bool>flag;solution aa;int sum;aa.count = 0;cout << "capacity:";cin >> capacity;cout << "number of stones:";cin >> num;while (num>=0){if (num <= 1){cout <<(num>0?1:0)<< endl;continue;}load.clear();flag.clear();sum = 0;for (int i = 0; i < num; i++){cin >> temp;sum += temp;load.push_back(temp);flag.push_back(false);}cout << "total weight of the stones is :"<<sum<< endl;cout << "load time is :"<<aa.min_load_time(load,flag,capacity) << endl;cout << "capacity:";cin >> capacity;cout << "number of stones:";cin >> num;}return 0;}
测试结果:
目前想到的最好的解决方法为贪心算法,可能还有其他比较好的算法(持续更新中),欢迎讨论!!!!!!
0 0
- 牛客网校招风暴周-运石头
- 牛客网校招风暴周算法题-回文数列
- 牛客网校招模拟-好多鱼
- 2013年去哪网校招题目
- 2012人人网校招山东济南java笔试
- 2017年牛客网校招模拟二
- 2012年 人人网校招 研发类的三道大题
- 2014.9.23——去哪儿网校招笔试
- 2016年链家网校招笔试(JAVA研发)
- 2017去哪儿网校招笔试题(一)
- 据说是2012年10月人人网校招的一道笔试题
- jsp model1模式 制作简易去哪儿网校招界面(四)
- 栓牛的石头
- 石头
- 校招编程题(一) 石头分堆问题之n个石头分成m堆
- 金融风暴来袭理财稳健当头 支招如何保住本金
- 中山大学自考网校招生简章
- 通王网校简介
- Struts 2中的constant详解
- 设计模式 I ——简单工厂模式(Factory)
- linux系统ln命令的用法
- 20160625常规赛总结
- GMTC
- 牛客网校招风暴周-运石头
- React Native控件之ToolbarAndroid工具栏控件讲解以及使用
- 为什么在定义hashcode时要使用31这个数呢?
- 程序员的福利:使用WebCollector爬取某美女网站上的图片
- git学习笔记--撤销修改
- 软件测试 (一) 软件测试方法大汇总
- MATLAB GUI设计中的一些常用函数
- C语言基础 输入三个整数从小到大排序
- 程序与程序员