美文网首页oj
20170720_hdu1050

20170720_hdu1050

作者: zhaohaoying | 来源:发表于2017-07-20 15:09 被阅读0次

    题目要求:

    在窄走廊移动桌子,区间重叠的无法同时移动,求最小移动次数*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;
    }
    

    总结:

    • 还是没想明白剩下的怎么安排的,貌似是离散数学的某个定理。

    相关文章

      网友评论

        本文标题:20170720_hdu1050

        本文链接:https://www.haomeiwen.com/subject/yfgdkxtx.html