洛谷P2484 SDOI2011 打地鼠

2022-04-01 12:49:32 字數 1436 閱讀 9154

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

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

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

hint:由於你可以把錘子的大小設定為1*1,因此本題總是有解的。

輸入格式:

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

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

輸出格式:

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

輸入樣例#1: 複製

3 3

1 2 1

2 4 2

1 2 1

輸出樣例#1: 複製

4

【樣例說明】

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

【資料規模和約定】

對於30%的資料,m,n<=5 ;

對於60%的資料,m,n<=30 ;

對於100%的資料,1<=m,n<=100 ,其他資料不小於0,不大於10^5 。

/*

列舉一錘子的範圍

然後判斷這種範圍能否合法的打死所有鼴鼠

*/#include

#include

#define maxn 101

using

namespace

std;

int map[maxn][maxn],n,m,ans=0x7fffffff

,sum,mx;

intf[maxn][maxn];

void check(int x,int

y) }}}

}ans=min(ans,sum/(x*y));

}int

main()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

printf("%d

",ans);

}

洛谷P2486 SDOI2011 染色

輸入格式 輸出格式 對於每個詢問操作,輸出一行答案。輸入樣例 1 6 5 2 2 1 2 1 1 1 21 3 2 42 5 2 6q 3 5 c 2 1 1 q 3 5 c 5 1 2 q 3 5 輸出樣例 1 典型的樹鏈剖分 線段樹,線段樹維護 區間左右端點顏色 和 區間顏色數。注意 當 上傳或...

洛谷 P2486 SDOI2011 染色

洛谷傳送門 給定一棵 nn 個節點的無根樹,共有 mm 個操作,操作分為兩種 將節點 aa 到節點 bb 的路徑上的所有點 包括 aa 和 bb 都染成顏色 cc。詢問節點 aa 到節點 bb 的路徑上的顏色段數量。顏色段的定義是極長的連續相同顏色被認為是一段。例如112221由三段組成 11 22...

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

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