總時間限制: 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 描述 在南韓,有一種小的青蛙。每到晚上,這種青蛙會跳越稻田,從而踩踏稻子。農民在早上看到被踩踏的稻子,希望找到造成最大損害的那只青蛙經過的路徑。每只青...
惱人的思緒
以為愛情已並不遙遠,可她又悄悄離去。雖然已經下班了,但我並沒有回家。乙個人走在街頭,看著秋風撒落的樹葉,我的心情比樹葉還要失落。我不想回家,只是乙個人靜靜的走著,不知要走向何方。我一直在想,卻不知道該如何面對著這早以預料的結局,不敢去想,一想起就會很痛。可是怎樣才能不想她呢!我做不到!秋風已漸漸涼了...