2017-11-16 11 views
-3

の解決に役立つことが問題です。親切に
enter image description hereC言語は、ここに私のパズル

、私はこのクエリを解決するために何ができるか私を助けて。これは私がどのように入力したかです:

#include <math.h> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <assert.h> 
#include <limits.h> 
#include <stdbool.h> 

int matrix(int A_size_rows, int A_size_cols, int** A) { 

} 

int main() { 
    int n; 
    int m; 
    scanf("%i %i", &n, &m); 
    int A[n][m]; 
    for (int A_i = 0; A_i < n; A_i++) { 
     for (int A_j = 0; A_j < m; A_j++) { 

      scanf("%i",&A[A_i][A_j]); 
     } 
    } 
    int result = matrix(n, m, A); 
    printf("%d\n", result); 
    return 0; 
} 
+3

あなたは –

+0

は、動的計画法を用いて行うことができます....何もしないビットを忘れてしまいました。 –

+0

@BhawandeepSingla動的プログラミングとは何ですか? –

答えて

1

達成するために最大スコアを見つけるためには、おそらく再帰的なバックトラッキングアルゴリズムを使用する必要があります。機能DIRに応じて現在位置を更新し

int move (int dir, int curx, int cury, int curscore) { 
    ... 
} 

を構築し、合計スコアにスコアを追加し、すべての3つの可能性に自分自身を再帰的に呼び出します。また

move (MOVE_LEFT, newx, newy, newscore); 
move (MOVE_RIGHT, newx, newy, newscore); 
move (MOVE_DOWN, newx, newy, newscore); 

、あなたがいることを確認する必要があります同じフィールド上で常に左右に移動しないでください(つまり、方向を変更するだけでを1行につけて)、追跡する必要があります。そのようなスコアは2回カウントされません現在の行で既に訪れたものを追跡します)。

最後の行でMOVE_DOWNを呼び出すと、再帰が終了します。 次に、3つのmove()コールの戻り値を収集し、最大のものを独自の戻り値として使用します。これにより正しい結果が得られます。

私は願っています

、これはあなたがこの挑戦を習得できます。)

+0

これはどのように私の問題を解決するのだろうか?あなたは私の例をとって説明することができますか? –

+1

@JafferWilson Hm、あなたがここで何を期待しているのか分かりません。このチャレンジを解決するコンセプトをあなたに提供しようとしました。残りはあなた次第です(つまり、あなたのためにコーディングすることはこのサイトの範囲外です)。概念的に不明な点があれば教えてください – Karim