此题是简单题 题目http://poj.org/problem?id=1083
大致题意:1每移动一次桌子要10分钟(跟路径远近无关),2走廊 一次只能过一张桌子。求最少需要的时间。
解题思路:
1,对输入数据进行整理
奇偶统一(因为1和2,3和4.。。是共用一个走廊)
大小对齐,如果移出的房号大于移入的房号,可以置换一下,方便计算。
2,计算,我们要求的是每一个房间被经过的次数,最大者就是我们的解
代码如下:
#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
int temp[401];
int times;
cin>>times;
while (times--)
{
int num = 0;
int* out = NULL;
int* in = NULL;
int minutes = 0;
memset(temp, 0, 401*sizeof(int));
//data in
cin>>num;
out = new int[num + 1];
in = new int[num + 1];
for (int i=1; i<=num; i++)
cin>>out[i]>>in[i];
//process
for (int i=1; i<=num; i++)
{
//奇偶对齐
if (out[i]%2 != 0)
out[i]++;
if (in[i]%2 != 0)
in[i]++;
//大小对齐
if (out[i] > in[i])
{
int k = out[i];
out[i] = in[i];
in[i] = k;
}
//计算次数
for (int j=out[i]; j<=in[i]; j+=2)
{
temp[j]++;
}
}
//快排取最大值
sort(temp,temp+401);
cout<<temp[400]*10<<endl;
delete out;
delete in;
}
return 0;
}