IOI 1994 The Castle 城堡問題

2021-07-22 01:38:46 字數 1991 閱讀 9319

1   2   3   4   5   6   7  

#############################

1 # | # | # | | #

#####---#####---#---#####---#

2 # # | # # # # #

#---#####---#####---#####---#

3 # | | # # # # #

#---#########---#####---#---#

4 # # | | | | # #

#############################

(圖 1)

# = wall

| = no wall

- = no wall

圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成mn(m≤50,n≤50)個方塊,每個方塊可以有0~4面牆。

輸入程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向、東西向的方塊數。在接下來的輸入行裡,每個方塊用乙個數字(0≤p≤50)描述。用乙個數字表示方塊周圍的牆,1表示西牆,2表示北牆,4表示東牆,8表示南牆。每個方塊用代表其周圍牆的數字之和表示。城堡的內牆被計算兩次,方塊(1,1)的南牆同時也是方塊(2,1)的北牆。輸入的資料保證城堡至少有兩個房間。

輸出城堡的房間數、城堡中最大房間所包括的方塊數。結果顯示在標準輸出裝置上。

樣例輸入

4 

7 11 6 11 6 3 10 6

7 9 6 13 5 15 5

1 10 12 7 13 7 5

13 11 10 8 10 12 13

樣例輸出

5

9

這道題最麻煩就是牆的處理;為了判斷有沒有牆,我設了乙個3維陣列。int b[60

][60][4

];其中陣列代表每個座標的牆的方向,0代表西牆,1代表北牆,2代表東牆,3代表南牆。

而判斷有無牆我用了乙個迴圈。
while

(a>0)

k++;

a/=2;

}

然後就用廣搜就行了。
全**:
#include

#include

#include

#include

using

namespace std;

int i=

1,m,n,a,b[

60][

60][

4],sum,maxn,minx;

bool c[

60][

60];

int l[4]=

, r[4]=

, t[4]=

;queue<

int>f;

queue<

int>q;

void

count

(int e,

int o)

} f.

pop();

q.pop();

}while

(!f.

empty

());

if(minx>maxn)

maxn=minx;

}int

main

() k++;

a/=2;

}}for(

int i=

1;i<=m;i++)

for(

int j=

1;j<=n;j++)

}printf

("%d

\n%d"

,sum,maxn);

}

IOI 1994 數字三角形

總時間限制 1000ms 記憶體限制 65536kb 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。輸入 輸入的是一行是乙個整數n ...

IOI 1994 數字三角形

總時間限制 1000ms 記憶體限制 65536kb 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。輸入 輸入的是一行是乙個整數n ...

IOI 花店櫥窗

ioi 花店櫥窗 2017年8月14日 dp 遞迴輸出解決方案 假設你想以最美觀的方式布置花店的櫥窗。現在你有f束不同品種的花束,同時你也有至少同樣數量的花瓶被按順序擺成一行。這些花瓶的位置固定於架子上,並從1至v順序編號,v是花瓶的數目,從左至右排列,則最左邊的是花瓶1,最右邊的是花瓶v。花束可以...