CodeVS3958 火車進站

2022-05-02 15:36:11 字數 2347 閱讀 9017

時間限制: 1 s

空間限制: 256000 kb

題目等級 : 大師 master

火車站內往往設有一些主幹線分叉出去的鐵路支路,供火車停靠,以便上下客或裝載貨物。鐵路支路有一定長度;火車也有一定的長度,且每列火車的長度相等。 

假 設某東西向的鐵路上,有一小站。該站只有一條鐵路支路可供火車停靠,並且該鐵路支路最多能容納m 輛火車。為了火車行駛的通暢,該站只允許火車自東方進站,自西方出站,且先進站的火車必須先出站,否則,站內火車將發生堵塞。該火車站工作任務繁忙。每天 都有 n  輛自東方駛向西方的火車要求在預定時刻進站,並在站內作一定時間的停靠。

為了滿足每輛進站火車的要求,小站的排程工作 是井井有條地開展。在小站每天的工作開始前,小站工作人員須閱讀所有火車的進站申請,並決定究競接受哪些火車的申請。而對於不能滿足要求的火車,小站必須 提前通知它們,請它們改變行車路線,以免影響正常的鐵路運輸工作。由於火車進站、出站的用時可以忽略不計,小站允許幾輛火車同時進站或出站,且小站工作人 員可以任意安排這些火車進站的先後排列次序。小站的工作原則是盡量地滿足申請火車的要求。 

請你編乙個程式,幫助工作人員考察某天所有火車的進站申請,計算最多能滿足多少火車的要求。 

輸入描述 input description

共n+1 行。 

第一行是兩個正整數n 和m。(n<=100,m<=3); 

以下n 行每行是一輛火車的進站申請,第i+1 行的兩個整數分別表示第i 列火車的進站的時間和火車出站的時間。 

輸出描述 output description

僅一行,是乙個正整數b,表示火車站最多能接納的火車數量。 

樣例輸入 sample input

6 3 

2 4 

1 7 

3 6 

5 7 

8 10 

9 11

樣例輸出 sample output

5 資料範圍及提示 data size & hint

祝各位大牛早日ac

【題解】

分情況討論。

m = 1時,dp[i]表示i在站台上的最大進站數。dp[i] = max; 

要求j在i之前進站且j在i進站前出站

m = 2時,dp[i][j]表示i和j正在站台上的最大進站數。dp[i][j] = max;

要求k在j前進站,j在i前進站,且k在i進站前出站

m = 3時,dp[i][j][k]表示i,j,k正在站台上的最大進站數。dp[i][j][k] = max;

要求k在j前進站,l在k前進站,j在i前進站,且l在i進站前出站

先按進站時間從小到大排序,為了無後效性,從小往大遞推。為了判斷進站時間相等的若干列車,

i,j,k,l均要從1..n。

50^4資料略大,因此當遇到第乙個後面的車進站時間大於前面的車時直接break來減少常數

(實際上常數本來就很小,隨便過)

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define min(a, b) ((a) < (b) ? (a) : (b))

8#define max(a, b) ((a) > (b) ? (a) : (b))

910 inline void read(int &x)

1117

18const

int maxn = 100 + 10;19

20int

dp1[maxn], dp2[maxn][maxn], dp3[maxn][maxn][maxn], n, m;

2122

struct

node

2326

node(){}

27}node[maxn];

2829

bool

cmp(node a, node b)

3033

34int

ans;

3536

intmain()

3753 ans =max(ans, dp1[i]);54}

5556}57

else

if(m == 2)58

72 ans =max(ans, dp2[i][j]); 73}

74}75else

7694 ans =max(ans, dp3[i][j][k]);95}

96}97}

98 printf("%d"

, ans);

99return0;

100 }

codevs 3958火車進站

codevs3958 火車進站

有一種學會演算法的方法叫意會 有一種證明複雜度的方法叫目測 有一種推出狀態轉移方程的方法叫腦補 沃茲基朔德 首先我們瞧瞧資料範圍 m 3,那麼肯定是要我們列舉每一種m的情況了。首先我們把火車按照出站時間排個序。然後我們隨意腦補一下 當m 1時 令f i 表示站內停靠i號火車時最多進入火車。很容易腦補...

火車進站問題

給定乙個正整數n代表火車數量,0 比如火車進站 序列問題 c include include include include using std stack using std vector using namespace std bool ispoporder const int put orde...

火車進站問題

描述 給定乙個正整數n代表火車數量,0 知識點棧 執行時間限制 0m記憶體限制0輸入 有多組測試用例,每一組第一行輸入乙個正整數n 0 輸出輸出以字典序排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。樣例輸入 31 2 3 樣例輸出 1 2 3 1 3 2 2 1 3...