【POJ - 2078】マトリックス(DFS)

- >マトリックス

説明:

N×n行列を入力し、行列の右列の動作の各サイクルの任意の回数、右後毎に、各列の最大値と行の計算された行列、これらの最小値の最大値を出力することができます。

サンプル入力

2 
4 6 
3 7 
3 
1 2 3 
4 5 6 
7 8 9 
-1

サンプル出力

11 
15

トピックリンク

https://vjudge.net/problem/POJ-2078

 

N ^ n個の可能な状態まで右の行列の後に、N×n行列のために、行サイクルをDFS溶液を用いて、7まで^ 7 = 823問題543の状態は、検索が激しいことができます。使用DFSは、これらの状態を検索し、行列の各状態の欄が計算され、最大値、最小値への出力の最大値。

 

ACコード

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <fstreamの> 
の#include <アルゴリズム> 
書式#include <cmath> 
の#include <両端キュー> 
の#include <ベクトル> 
の#include <キュー> 
の#include < 文字列 > 
の#include <CStringの> 
#include <地図> 
の#include <スタック> 
の#include < 設定 > 
の#include <sstream提供>
 の#define IOS ios_base :: sync_with_stdio(0)。cin.tie(0)。
長い長いLL
 の#define 0x3f3f3f3f INF
 の#define MEM(X、Y)のmemset(X、Y、はsizeof(X))
 の#define MAXN 30
 使って 名前空間STDを、
 INT N-;
 int型MPが[MAXN] [MAXN];
 int型; ANS
 空隙 INIT(INT X)// 行MP [X] []右円
{
     int型 T MP = [X] [N- 1。];
     のためのINT J = N- 1。 ; J> 0 ; J、 
        MP [X] [J] = MP [X] [J- 1 ]; 
    MP [X] [ 0 ] =  T。
}
ボイド DFS(INT X)
{ 
    IF(X == N-)
    { 
        int型 maxSum = -INF; // カラムと最大値
        のためには、int型 I = 0、I <N - 、I ++は
        { 
            int型 SUM = 0 ;
             のためにINT J = 0 ; J <N-; J ++ 
                SUM + = MP [J] [I]は、
            maxSum = MAX(SUM、maxSum); 
        } 
        ANS =分(maxSum、ANS); // 保存列と最大値分
    }
    
    { 
        についてint型 I = 0 ; Iは、N <; Iは++)// 各行を右にn回回転させた
        { 
            INIT(X)、
            (XのDFS + 1 ); 
        } 
    } 
} 
int型のmain()
{ 

    一方(CIN >> N-、N- =! - 1。 
    { 
        MEM(MP、0 ); 
        ANS = INF; 
         のためのint型 I = 0を I <N-; I ++ のためのINT J = 0 ; J <N-; J ++
                CIN >> MP [I]、[J]、
        DFS(0); // 検索を開始 
        COUT ANS << << ; ENDL 
    } 
    戻り 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/sky-stars/p/11210053.html