题目要求:
在窄走廊移动桌子,区间重叠的无法同时移动,求最小移动次数*10即为最小移动时间。
思路:
1、几个移动过程两两不相容,求最小调解次数即为求两两不相容的集合的最大元素个数。
2、将每一点作为一维数组的一个元素,求其参与次数,次数最大说明在该处互不相容的移动过程最多,该次数即为所求。
//
// main.cpp
// hdu1050
//
// Created by Haoying Zhao on 17/7/20.
// Copyright © 2017年 Haoying Zhao. All rights reserved.
//
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
while(n>0) {
n--;
int a[200] = {0};
int m,t1 = 0,t2 = 0;
cin >> m;
for(int i = 0; i < m; i++) {
cin >> t1;
cin >> t2;
if(t2 < t1) {
int t = t2;
t2 = t1;
t1 = t;
}
t1 = (t1-1)/2;
t2 = (t2-1)/2;
for(int i = t1; i <= t2; i++)
a[i]++;
}
int max = 0;
for(int i = 0; i < 200; i++) {
if(max < a[i])
max = a[i];
}
cout << max*10 << endl;
}
return 0;
}
总结:
- 还是没想明白剩下的怎么安排的,貌似是离散数学的某个定理。
网友评论