问题描述:
要举办一场机器人攀登接力赛,规定攀登总高度为m米,每队参赛机器人个数为n(2≤n≤10),每个机器人只能攀登1次,至少攀登1米,至多攀登k(1≤k≤20)米,并且只能在整米处接力。某队有n个机器人,在平时训练时进行了性能测试,得出每个机器人连续攀登1米、2米、…、k米的时间,机器人攀登路程越长,攀登速度就越慢。设计一个贪心算法,安排该队各机器人的攀登高度,使总攀登时间最少。
输入数据:
第一行,3个整数,由空格分隔,分别是参赛机器人数n、每个机器人允许攀登的最大高度k和总攀登高度m;
第二行开始的n行,每行k个整数,用空格分隔,分别表示机器人连续攀登1米、2米、…、k米的时间。
输出数据
第一行,为各机器人安排的攀登高度,用空格分隔;
第二行,总的最少攀登时间。
算法思想:
算法使用贪心的思想,因为每个机器人都必须要用到,因从先给每个机器人爬1米,随后使用贪心策略,每次选取这四个机器人向上爬
一米要增加的最小时间所对应的机器人进行向上爬一米,得到的最后每个机器人的米数即为最短时间的攀爬策略
算法步骤:
1、用一个time整型记录目前已花费的时间 ,一个height整型记录目前的高度,一个now_height数组记录每个机器人目前所在的高度,先让每个机器人上爬一米,每个机器人
now_height++,time += robot_height[i][0]
2、随后对每个机器人上爬一米的时间robot_height[i][now_height[i]]-robot_height[i][now_height[i] - 1]进行比较,选出最短的时间
对该机器人的now_height++ 直到height大于total_height为止
3、最后得到的now_height数组即为各个机器人的贪心策略得出的最短时间的攀爬策略
头文件代码:
定义了一个类、声明了用到的各个成员变量,公有的climb函数是调用贪心算法的入口
RobotClimbing.h:
#ifndef ROBOTCLIMBING_H_INCLUDED
#define ROBOTCLIMBING_H_INCLUDED
#include<iostream>
#include<fstream>
#include<malloc.h>
using namespace std;
class RobotClimbing
{
int num;