洛谷P1007 獨木橋(貪心)

2021-10-10 19:05:44 字數 1513 閱讀 1507

戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納1個人通過。假如有2個人相向而行在橋上相遇,那麼他們2個人將無妨繞過對方,只能有1個人回頭下橋,讓另乙個人先通過。但是,可以有多個人同時呆在同乙個位置。

突然,你收到從指揮部發來的資訊,敵軍的轟炸機正朝著你所在的獨木橋飛來!為了安全,你的部隊必須撤下獨木橋。獨木橋的長度為l

ll,士兵們只能呆在座標為整數的地方。所有士兵的速度都為1

11,但乙個士兵某一時刻來到了座標為0或l+1

l+1l+

1的位置,他就離開了獨木橋。

每個士兵都有乙個初始面對的方向,他們會以勻速朝著這個方向行走,中途不會自己改變方向。但是,如果兩個士兵面對面相遇,他們無法彼此通過對方,於是就分別轉身,繼續行走。轉身不需要任何的時間。

由於先前的憤怒,你已不能控制你的士兵。甚至,你連每個士兵初始面對的方向都不知道。因此,你想要知道你的部隊最少需要多少時間就可能全部撤離獨木橋。另外,總部也在安排阻攔敵人的進攻,因此你還需要知道你的部隊最多需要多少時間才能全部撤離獨木橋。

第一行:乙個整數l

ll,表示獨木橋的長度。橋上的座標為1…l

1…l1…

l 第二行:乙個整數n

nn,表示初始時留在橋上的士兵數目

第三行:有n

nn個整數,分別表示每個士兵的初始座標。

只有一行,輸出2個整數,分別表示部隊撤離獨木橋的最小時間和最大時間。2個整數由乙個空格符分開。42

1 32 4

初始時,沒有兩個士兵同在乙個座標。

資料範圍n≤l

≤5000

n≤l≤5000

n≤l≤50

00。先簡化一下問題,:

有乙個線段 [0, l+1] ,上面有 n 個點分布在 [1, l]。每個點可以向左走或向右走,走到 0 或者 l+1 結束。如果兩個點相遇調轉方向。問所有情況中(每個點可以向左或向由走),時間最小和最大的分別是多少

可以列舉嗎?2

n2^n

2n顯然不可能。所以此時我們要先考慮考慮乙個點:相遇情況的處理。

相遇情況的處理

兩個士兵相遇,然後各自反向,但因為士兵沒有編號,並且速度相同,所以實際可以視作兩個士兵只是繼續各自向前走,沒有互相影響。(不想士兵a和b相遇,想一想士兵a和a相遇)

輸出問題

要求輸出「部隊撤離獨木橋的最小時間和最大時間」,一定不要被繞暈了。

最小時間為例,每個士兵有兩個方向選擇,此時都向最小距離方向走,但最後應該求所有人中,用時最多的那個士兵的時間。

#include

#include

using

namespace std;

intmain()

cout << min <<

" "

}

貪心 洛谷 P1007 獨木橋

戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個人將無妨繞...

洛谷 P1007 獨木橋

題目背景 戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個...

洛谷 P1007 獨木橋

題目背景 戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,於是命令你的士兵們到前方的一座獨木橋上欣賞風景,而你留在橋下欣賞士兵們。士兵們十分憤怒,因為這座獨木橋十分狹窄,只能容納乙個人通過。假如有兩個人相向而行在橋上相遇,那麼他們兩個...