マトリクス(行列)

[問題の説明]
ルルは、IQテストを設計しました。n行n列の行列のための試験。各行列は、上のグリッドがある
番号を。あなたは、サブ行列とみなさIQパスの最も美しいを見つける必要があります。
それは最も美しく、最も美しい度です。私たちは、この行列の主対角線図形の美しさのために行列を定義し、減算
対角線と他の数字の合計に。対角線の左上から右下への主対角線。
[入力形式
N-正の整数の第一の入力線(2 <= N - <= 400)

次のN * N行列であり、行列1000 -1000のデジタル数です。
出力フォーマット] [
美しい部分行列の全ての最大値を表す整数。

入力
2
1〜2
4
出力
4

 

入力
3
1 2 3
4 5 6
7 8 9
出力
0

 

入力
3
-3 4 5
7 9 -2
1 0 -6
出力
5

 

データ、N≤100の50%。
データの100%、400≤2≤Nです。

 

プレフィックスと最適化

N ^ 3

#include <iostreamの> 
する#include <cstdioを>
 の#define MAX(a、b)はA> B?A:B
 の#define Rレジスタ
 の#define MAXN 400 + 5
 使用して 名前空間STD。
#defineは長い長いっ
LL N。
LLのMP [ 405 ] [ 405 ]、S1 [ 405 ] [ 405 ]、S2 [ 405 ] [ 405 ]。
INT メイン()
{ 
    freopenは(" matrix.in "" R " 、STDIN)。
    freopenは(" matrix.out "" W " 、STDOUT)。
    cinを >> N;
    以下のための(R用のint i = 1 ; iは= N <; I ++ のための(R INT J = 1 ; J <= nであり、j ++ 
    { 
        CIN >> MP [I] [J]。
        S1 [i]は[J] = S1 [I- 1 ] [J- 1 ] + MP [I] [J]。
        S2 [i]は[J] = S2 [I- 1 ] [J + 1 ] + MP [I] [J]。
    } 
    INT ANS = 0 以下のための(R int型 I =1 ; iが<= N; I ++ のための(R INT J = 1 ; J <= N; J ++ のための(R INT K = 1 ; K + iが<= N && J + K <= nであり、k ++ 
                ANS = MAX( ANS、S1 [I + K] [J + K] -S1 [I- 1 ] [J- 1 ] -S2 [I + K] [J] + S2 [I- 1 ] [J + K + 1 ])。
    coutの << ANS << てendl;
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/000226wrp/p/11352791.html