#18014: 要插稻草人情形


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
a465. 12405 - Scarecrow -- UVa12405 | From: [39.8.203.54] | 發表日期 : 2019-06-10 01:02

依題意,稻草人可以守護自己以及相鄰的左右良田

要以最少的稻草人為目標,需要考量以下情形

一、連續三個

...

連續的三個良田,一定要一個稻草人放在中間,如果連續良田數超過三個,每三個為一組分配

剩下不足的再考慮以下情形

二、連續兩個

..#、#..

考慮這個的前提,為情形一不成立時

例如 ...#、#... 不屬於此

一樣只要插一個即可

三、良-差-良

.#.

這個是最重要的,因為若沒考慮此而直接考慮情形四,每一組情形三一定會多插一個

考慮這個的前提,為情形一二不成立時

例如 ..#.、...#.、.#..、.#...、..#..、...#..、..#...、...#... 都不屬於此

只要插稻草人在差田,就可以防守到左右良田

四、只有一個良田,且不屬於上面三個情形

沒什麼好說,所有良田都要稻草人守,如果上面情形都處理完,剩下的每個情形四良田都要一個稻草人

 

以上四個情形,用陣列存測資後,我用兩次迴圈,皆從頭開始

第一個迴圈,判斷情形一二三,第二個迴圈,單獨判斷情形四

其中第一個,先考慮情形一,前者不成立時考慮情形二,前者又不成立時考慮情形三

也就是 if ( 情形一 ) {} else if ( 情形二 ) {} else if ( 情形三 )

大概是這樣判斷

( 不知道為何,這題沒人討論 )

 
#18018: Re:要插稻草人情形


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.32.12]
最後登入時間 :
2024-04-24 19:31:09
a465. 12405 - Scarecrow -- UVa12405 | From: [61.222.86.91] | 發表日期 : 2019-06-10 20:55

原文吃掉,原 PO 可能想得太複雜了。

題目要求用最少的稻草人的覆蓋全部的良田,採用貪婪法,由最左邊往右掃描一遍即可。

過程中考量格子是屬於良田還是荒地的狀態,而良田又分成是否被稻草人覆蓋的狀態來討論三種情況。

(1) 荒地:不需考慮。

(2) 良田且已經被稻草人覆蓋:不需考慮。

(3) 良田且未被稻草人覆蓋:則在這個良田的右邊格子插上一個稻草人,這樣可以達到最大的覆蓋效果。

而(3)有可能發生在最邊界那格時就只要將稻草人改插在目前那塊良田上即可。

 
 
ZeroJudge Forum