2812 惱人的青蛙

2021-08-15 17:37:27 字數 1998 閱讀 9609

總時間限制: 2000ms

單個測試點時間限制: 500ms

記憶體限制: 65536kb

描述在南韓,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子,希望找到造成最大損害的那只青蛙經過的路徑。每只青蛙總是沿著一條直線跳越稻田,而且每次跳躍的距離都相同。

如下圖所示,稻田裡的稻子組成乙個柵格,每棵稻子位於乙個格點上。而青蛙總是從稻田的一側跳進稻田,然後沿著某條直線穿越稻田,從另一側跳出去

根據圖4,農民能夠構造出青蛙穿越稻田時的行走路徑,並且只關心那些在穿越稻田時至少踩踏了3棵水稻的青蛙。因此,每條青蛙行走路徑上至少包括3棵被踩踏的水稻。而在一條青蛙行走路徑的直線上,也可能會有些被踩踏的水稻不屬於該行走路徑

①不是一條行走路徑:只有兩棵被踩踏的水稻;

②是一條行走路徑,但不包括(2,6)上的水道;

③不是一條行走路徑:雖然有3棵被踩踏的水稻,但這三棵水稻之間的距離間隔不相等。

請你寫乙個程式,確定:在一條青蛙行走路徑中,最多有多少顆水稻被踩踏。例如,圖4的答案是7,因為第6行上全部水稻恰好構成一條青蛙行走路徑。

輸入 從標準輸入裝置上讀入資料。第一行上兩個整數r、c,分別表示稻田中水稻的行數和列數,1≤r、c≤5000。第二行是乙個整數n,表示被踩踏的水稻數量, 3≤n≤5000。在剩下的n行中,每行有兩個整數,分別是一顆被踩踏水稻的行號(1~r)和列號(1~c),兩個整數用乙個空格隔開。而且,每棵被踩踏水稻只被列出一次。

輸出 從標準輸出裝置上輸出乙個整數。如果在稻田中存在青蛙行走路徑,則輸出包含最多水稻的青蛙行走路徑中的水稻數量,否則輸出0。

樣例輸入

6 7

14 2 1

6 6

4 2

2 5

2 6

2 7

3 4

6 1

6 2

2 3

6 3

6 4

6 5

6 7

樣例輸出

7

#include 

#include

#include

using

namespace

std;

struct point

};bool

operator

< (const point a, const point b)

int steps(vector

point_v, int start, int r, int l, int r, int c) else else}}

}int main()

sort(point_v.begin(), point_v.end());

//從左上角向下遍歷,列舉每個存在的 點

for (int j = 0; j < point_v.size()-1; ++j)

if(point_v[j].r+(maxs-1)*r>r)

if(point_v[j].l+(maxs-1)*l>c || point_v[j].l+(maxs-1)*l<1)

//如果都是沒問題的,那麼就產生乙個新的步數,進行比較

int exam = steps(point_v, j, r, l, r, c);

if(exam > maxs)}}

if(maxs==2) maxs = 0;

cout

0;}

惱人的青蛙POJ2812

解題思路 因為要求出最長的路徑,所以需要比較全部的路徑長度。對於每一條路徑,因為步長相等,所以只要確定開始兩個被踩的點就可以求出整條路徑。假設前兩個點為 x1,y1 x2,y2 則步長為dx x2 x1,dy y2 y1,需要判斷下面三個條件是否都滿足。1 之後每個點 xi,yi xi 1 dx,y...

poj 2812 惱人的青蛙(列舉 剪枝)

程式設計實習列舉練習 poj 2812 惱人的青蛙 列舉 剪枝 總時間限制 2000ms 單個測試點時間限制 500ms 記憶體限制 65536kb 描述 在南韓,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子,希望找到造成最大損害的那只青蛙經過的路徑。每只青...

惱人的思緒

以為愛情已並不遙遠,可她又悄悄離去。雖然已經下班了,但我並沒有回家。乙個人走在街頭,看著秋風撒落的樹葉,我的心情比樹葉還要失落。我不想回家,只是乙個人靜靜的走著,不知要走向何方。我一直在想,卻不知道該如何面對著這早以預料的結局,不敢去想,一想起就會很痛。可是怎樣才能不想她呢!我做不到!秋風已漸漸涼了...