1 2 3 4 5 6 7#############################
1 # | # | # | | #
#####---#####---#---#####---#
2 # # | # # # # #
#---#####---#####---#####---#
3 # | | # # # # #
#---#########---#####---#---#
4 # # | | | | # #
#############################
(圖 1)
# = wall
| = no wall
- = no wall
圖1是乙個城堡的地形圖。請你編寫乙個程式,計算城堡一共有多少房間,最大的房間有多大。城堡被分割成mn(m≤50,n≤50)個方塊,每個方塊可以有0~4面牆。
輸入程式從標準輸入裝置讀入資料。第一行是兩個整數,分別是南北向、東西向的方塊數。在接下來的輸入行裡,每個方塊用乙個數字(0≤p≤50)描述。用乙個數字表示方塊周圍的牆,1表示西牆,2表示北牆,4表示東牆,8表示南牆。每個方塊用代表其周圍牆的數字之和表示。城堡的內牆被計算兩次,方塊(1,1)的南牆同時也是方塊(2,1)的北牆。輸入的資料保證城堡至少有兩個房間。
輸出城堡的房間數、城堡中最大房間所包括的方塊數。結果顯示在標準輸出裝置上。
樣例輸入
47 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
樣例輸出
59
這道題最麻煩就是牆的處理;為了判斷有沒有牆,我設了乙個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。花束可以...