贪心算法(搬桌子)
·
题目描述
在一个狭窄的走廊里将桌子从一个房间移动到另一个房间,走廊的宽度只能允许一个桌子通过。给出 t,表示有 t 组测试数据,再给出 n,表示要移动 n 个桌子。n 下面有 n 行,每行两个数字,表示将桌子从 a 房间移动到 b 房间。走廊的分布图如图所示,每移动一个桌子到达目的地需要 10 分钟,问移动 n 个桌子需要的时间。

输入
3
4
10 20
30 40
50 60
70 80
2
1 3
2 200
3
10 100
20 80
30 50
输出
10
20
30
代码展示
#include<bits/stdc++.h>
using namespace std;
/*整体思路:
每搬运一趟,房间的路线重叠度就少一,所以只需找出重叠度最大的房间号即为需要的搬运次数
*/
int main() {
int t,n,s,e,max,p[200];//p来存每个房间重叠度
cin>>t;
while(t--) {
for(int i=0;i<200;i++) {//每次处理新的一组数据时刷新p;
p[i]=0;
}
cin>>n;
for(int i=0; i<n; i++) {
cin>>s>>e;
s=(s-1)/2;//处理房间号对门,使对门房间号对应的p下标一样
e=(e-1)/2;
if(s>e) {//如果开始房间号小于结束房间号则交换,不影响房间重叠度
int temp=s;
s=e;
e=temp;
}
for(int j=s; j<=e; j++) { //从起点到终点每一个房重叠度都加1
p[j]++;
}
}
max=-1;
for(int k=0; k<=e; k++) {//找出最大重叠度的房间
if(p[k]>max) {
max=p[k];
}
}
cout<<max*10<<endl;
}
return 0;
}
更多推荐



所有评论(0)