演算法學習之路|搬運傢俱(模擬)

kissjz發表於2018-02-27

有左右各200間房間,對門的房間之間移動傢俱,每次移動花費10分鐘,移動路徑上有交集就不能同時移動,問最少花多少時間能完成
輸入格式:第一行一個數字t,表示測試數量,接下來每個樣例第一行,一個數字n表示移動次數,接下來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 <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
int n,a[405];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        memset(a,0,sizeof(a));
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            int x,y;
            scanf("%d%d",&x,&y);
            if(x>y)
            {
                int t=x;
                x=y;
                y=t;
            }
            if(x%2==0)
                x--;
            if(y%2==1)
                y++;
            for(int i=x;i<=y;i++)
                 a[i]++;
        }
        int maxx=0;
        for(int i=1;i<=400;i++)
        {
            maxx=max(maxx,a[i]);
        }
        printf("%d
",maxx*10);
    }
    return 0;
}


相關文章