質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

2回答

686閲覧

競プロのような問題です

white21

総合スコア1

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

1クリップ

投稿2020/05/22 04:40

入力 1行目:自然数__n__
入力 2行目:0, 1の要素からなる__n__行__n__列の行列

出力:__n__行__n__列の行列の中に含まれる、1のみからなる正方形のうち最大のものの大きさ(辺の数)

例えば、以下のような問題です。

入力:
5
1 1 0 1 0
1 1 0 0 1
0 0 1 1 1
0 1 1 1 1
1 0 1 1 1

出力:
3

上記の例の場合、左上と右下に、1のみからなる正方形があります。
しかし、最大の辺をもつものを知りたいため、答えとしては「3」となります。

以上の問題について、私なりに考えてみたのですが、検討がつきません。

分かる方、いらっしゃいましたら、教えていただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/05/22 04:50

どこの部分を指して「3」が回答になるのでしょうか?
dodox86

2020/05/22 05:18

制約、例えばnの取り得る値の範囲(最小~最大)があれば示してもらえると良かった。(総当たりで求める場合の計算量に関わるため) もう閉じた質問なので、良いのですけど。
guest

回答2

0

ある kkサイズの正方形な範囲 が条件(その範囲内の要素が全て1である)を満たすかどうか? は,
「その範囲内の要素値の総和がk
kであるかどうか?」で判定できると思います.
→矩形範囲の総和を計算する方法として,「積分画像 (integral image)」というデータを作って使う方法があります.

一番でかい正方形を見つければよいという話なので,
辺の長さを大きい側から順に調べていく形で,採り得る正方形領域を総当たりしていき,最初に見つけた正方形のサイズが答えになります.

投稿2020/05/22 04:59

fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

white21

2020/05/22 05:08

回答ありがとうございます! もうベストアンサーを選んでしまっていたにもかかわらず、、、すみません。 総和がk*kかどうかで正方形の判定を行うという考え方は、非常にインパクトがありますね。 参考にさせていただきます。
guest

0

ベストアンサー

これくらいの数だったら総当たりすればできます。考えられるすべての正方形を列挙し、その中から 1 で埋まっているものを抽出して面積を計算し、その最大値を求めるわけです。

まず左上を頂点とする正方形がいくつあるか、次に左上の一つ右を頂点とする正方形がいくつあるか、という風に考えるところから始めたらどうでしょうか。

投稿2020/05/22 04:46

Zuishin

総合スコア28662

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2020/05/22 04:48

それができたら今度は、水平方向と垂直方向に広げながら 0 があった時点で列挙をやめるようにすると時間が短縮されます。
white21

2020/05/22 04:53

なるほど……! 総当たりという手段があることを忘れていました。 スッキリしました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問