B2241 打地鼠 暴力模擬

2022-03-13 06:03:08 字數 1858 閱讀 8040

大水題!!!30分鐘ac(算上思考時間),直接模擬就行,加乙個判斷約數的剪枝,再多加幾個剪枝就可以過(資料巨水)

我也就會做暴力的題了。

題幹:

description

打地鼠是這樣的乙個遊戲:地面上有一些地鼠洞,地鼠們會不時從洞裡探出頭來很短時間後又縮回洞中。玩家的目標是在地鼠伸出頭時,用錘子砸其頭部,砸到的地鼠越多分數也就越高。

遊戲中的錘子每次只能打乙隻地鼠,如果多隻地鼠同時探出頭,玩家只能通過多次揮舞錘子的方式打掉所有的地鼠。你認為這錘子太沒用了,所以你改裝了錘子,增加了錘子與地面的接觸面積,使其每次可以擊打一片區域。如果我們把地面看做m*n的方陣,其每個元素都代表乙個地鼠洞,那麼錘子可以覆蓋r*c區域內的所有地鼠洞。但是改裝後的錘子有乙個缺點:每次揮舞錘子時,對於這r*c的區域中的所有地洞,錘子會打掉恰好乙隻地鼠。也就是說錘子覆蓋的區域中,每個地洞必須至少有1只地鼠,且如果某個地洞中地鼠的個數大於1,那麼這個地洞只會有1只地鼠被打掉,因此每次揮舞錘子時,恰好有r*c只地鼠被打掉。由於錘子的內部結構過於精密,因此在遊戲過程中你不能旋轉錘子(即不能互換r和c)。

你可以任意更改錘子的規格(即你可以任意規定r和c的大小),但是改裝錘子的工作只能在打地鼠前進行(即你不可以打掉一部分地鼠後,再改變錘子的規格)。你的任務是求出要想打掉所有的地鼠,至少需要揮舞錘子的次數。

hint:由於你可以把錘子的大小設定為1*1

,因此本題總是有解的。

input

第一行包含兩個正整數m和n;

下面m行每行n個正整數描述地圖,每個數字表示相應位置的地洞中地鼠的數量。

output

輸出乙個整數,表示最少的揮舞次數。

sample input33

1212

4212

1sample output

4【樣例說明】

使用2*2的錘子,分別在左上、左下、右上、右下揮舞一次。

【資料規模和約定】

對於100%的資料,1

<=m,n<=100,其他資料不小於0,不大於10^5

**:

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

#define duke(i,a,n) for(int i = a;i <= n;i++)

#define lv(i,a,n) for(int i = a;i >= n;i--)

#define clean(a) memset(a,0,sizeof(a))

const

int inf = 1

<< 30

;typedef

long

long

ll;typedef

double

db;template

void read(t &x)

template

void

write(t x)

int n,m,tot = 0,s = 0

;int mp[105][105],k[105][105

];bool judge(int l,int

r) duke(i,

1,n - l + 1

) }}

}}

}duke(i,

1,n)

}return

true;}

intmain()

}lv(i,tot,1)}}

}}

return0;

}/*3 31 2 1

2 4 2

1 2 1

*/

UPC 4170 打地鼠 暴力列舉

打地鼠是這樣的乙個遊戲 地面上有一些地鼠洞,地鼠們會不時從洞裡探出頭來很短時間後又縮回洞中。玩家的目標是在地鼠伸出頭時,用錘子砸其頭部,砸到的地鼠越多分數也就越高。遊戲中的錘子每次只能打乙隻地鼠,如果多隻地鼠同時探出頭,玩家只能通過多次揮舞錘子的方式打掉所有的地鼠。你認為這錘子太沒用了,所以你改裝了...

2014 8 2模擬賽 打地鼠遊戲

題目描述 最近2320學長經常玩這個遊戲,以至於敲擊每個地鼠只要1秒。他在想如何敲擊能使總分最大。輸入描述 輸入包含3行,第一行包含乙個整數n 1 n 100000 表示有n個地鼠從地上冒出來,第二行n個用空格分隔的整數表示每個地鼠冒出後停留的時間 maxt 50000 第三行n個用空格分隔的整數表...

題解 洛谷P2484 打地鼠(模擬)

對於錘子的大小,我們可以列舉。然後模擬對要砸的部分進行操作,對該區域減去砸的地方左上角的數 也就是次數 如果小於零就return false。這樣會浪費許多時間。我們可以從大到小列舉錘子,並且只有所有地洞地鼠之和 錘子體積為0時才進行操作,另外,只有當地鼠和 錘子體積小於等於已得到答案的最小值時才砸...