Skip to the content.

过桥问题-基础版

题目分析

抛出代码

#include <iostream>
#include <algorithm>
using namespace std;
#define SIZE 105

int num;
int list[SIZE];

int transport1(int num)//完全凭借最快的
{
	cout << "->" << list[0] << "," << list[num - 1] << endl;
	cout << "<-" << list[0] << endl;
	cout << "->" << list[0] << "," << list[num - 2] << endl;
	cout << "<-" << list[0] << endl;
	return list[num - 1] + list[0]+ list[num - 2] + list[0];

}

int transport2(int num)//借助第二快
{
	cout << "->" << list[0] << "," << list[ 1] << endl;
	cout << "<-" << list[0] << endl;
	cout << "->" << list[num - 1] << "," << list[num - 2] << endl;
	cout << "<-" << list[1] << endl;
	return list[ 1] + list[0] + list[num - 1] + list[1];

}

int  transport(int num)
{
	if (list[num - 2] + list[0] < 2 *list[1])
		return transport1(num);
	else
		return transport2(num);		
}



int main()
{
std::ios::sync_with_stdio(false);

int sum = 0;

cin >> num; 
//输入 num个数  


for (int i = 0; i < num; i++)
	cin >>list[i];
//每个人速度vi

sort(list,list+num);

while (num>3)
{
	sum+=transport(num);
	cout << "总时间:" << sum<< endl;
	num-=2;
}
if (num == 3)
{

	cout << "->" << list[0]<< "," << list[2] << endl;
	cout << "<-" << list[0]<< endl;
	cout << "->" << list[0]<< "," << list[1] << endl;
	sum += list[2];
	sum += list[0];
	sum += list[1];
}
else//2个
{
	cout << "->" << list[0]<< "," << list[1] << endl;
	sum += list[1];
}


cout << "总时间:" << sum << endl;


	return 0; 
}

课后作业

ZOJ 1877 POJ 2573