Where s Bessie 暴力列舉

2021-10-10 13:13:46 字數 1747 閱讀 2254

題意:求包含僅兩種顏色且兩種顏色一種連通塊為1,一種連通塊大於1的最大矩形個數,這裡最大矩形指的是該矩形不存在子矩形滿足該性質。

思路:n

nn只有20,考慮列舉矩形的左上角座標和右下角座標,複雜度o(n

4)

o(n^4)

o(n4

)是夠的,找連通塊就dfs

dfsdf

s然後標記搜過的,同時開個陣列記錄每種顏色出現的次數,然後特判一下 ,滿足條件的存入乙個結構體陣列。

然後去重o(t

ot2)

o(tot^2)

o(tot2

),對每個矩形i

ii,判斷是否存在矩形j

jj,使得矩形i

ii為矩形j

jj的子矩形即可。

暴力美學愛了愛了,當時怎麼沒想到呢,怪我太菜了!

#include

using

namespace std;

typedef

long

long ll;

const

int n=

22,m=

405*

405,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define mst(a,b) memset(a,b,sizeof a)

#define pii pair

#define fi first

#define se second

#define pb push_back

int n,vis[n]

[n],cnt,tot;

int d[4]

[2]=

;char a[n]

[n];

struct nodeb[m]

;void

dfs(

int tx,

int ty,

int x,

int y,

int u,

int v,

char c)}}

bool

check

(int x,

int y,

int u,

int v)

*/int ch[26]

=,js=0;

mst(vis,0)

;for

(int i=x;i<=u;i++

)for

(int j=y;j<=v;j++

)dfs

(i,j,x,y,u,v,a[i]

[j]);}

if(js!=2)

return

false

;int f1=

0,f2=0;

for(

int i=

0;i<

26;i++)if

(f1==

1&&f2==1)

return

true

;return

false;}

intmain()

;}}int ans=0;

for(

int i=

1;i<=tot;i++)}

if(ok)

}printf

("%d\n"

,ans)

;return0;

}

總結:遇到題目資料範圍比較小的情況,先想暴力解法,然後在此基礎上去優化,暴力解法是最好想也是最純粹的解法。

HDU 2335 Containers(暴力列舉)

題意 n個40x8的箱子,要求建乙個矩形場地來放這些箱子,箱子間有已知大小的間隙,最高可以放5層。求場地的最小面積,在此基礎上盡量方。思路 設場地x列,y行,那麼x y n 4 5 所以x不會超過sqrt n 所以列舉x求y就行了。比賽的時候考慮到隨著x的增加,答案先變小後變大,所以三分的,但是樣例...

51Nod 1548 列舉 暴力

一天,歐姆諾諾姆來到了朋友家裡,他發現了許多糖果。有藍色和紅色兩種。他知道每顆紅色糖果重wr克,每顆藍色糖果重wb克。吃一顆藍色糖果會給他帶來hb的歡樂值,吃一顆紅色糖果會給他帶來hr的歡樂值。歐姆諾姆最多只能吃c克的糖果,而且每一顆糖果不能只吃一半。現在他想通過吃藍色和紅色的糖果來獲得最大的歡樂值...

演算法學習筆記 13 暴力求解法01 列舉排列

所謂暴力求解法,大意應該是根據提議分析出的所有可能的情況 優化過的研究域 來一一研究,得到最終結果。第一節呢就是列舉排列。這裡的排列指的是乙個集合的元素中根據字典序進行排列。用wikioi的一道題來進行解釋吧 樣例輸入 sample input 3樣例輸出 sample output 1 2 3 1...