トピックポータル
中国語の翻訳:
問題解決のアイデア:
F [i] [j]は、i番目の行のj番目の列を表す場合、最小利得が得られます
ACコード:
1の#include <iostreamの> 2の#include <cstdioを> 3の#include <CStringの> 4 5 使用 名前空間STDを、 6 7 長い 長 N、M、[ 1001 ]、[ 1001 ]、F [ 1001 ] [ 1001 ]。 8 9 INT メイン(){ 10 ながら(scanf関数(" %D%D "、&N、&M)=!{EOF) 11 のmemset(0、はsizeof ())。 12 のmemset(F、0x3f3f3f、sizeof (F))。 13 のために(INT iは= 1 ; iが<= N; I ++ ) 14 のための(INT J = 1 ; J <= Mであり、j ++ ) 15 のscanf(" %dの"、および[I] [J])。 16 F [ 1 ] [ 1 ] = [ 1 ] [ 1 ]。 17 のために(INT iは= 2 ; iが<= M; I ++){ // 处理第一行 18 であれば(I%2 == 0)ただし、f [ 1 ] [I] = F [ 1 ] [I- 1 ] + [ 1 ] [I] * [ 1 ] [I- 1 ]。 19 他 F [ 1 ] [I] = F [ 1 ] [I- 1 ]。 20 もし(I == 2)ただし、f [ 1 ] [ 2 ] - = F [ 1 ] [ 1 ]。 21 } 22 のために(INT iは= 2 ; iが<= N; I ++){ // 处理第一列 23 であれば(I%2 == 0)F [i]を[ 1 ] = F [I- 1 ] [ 1 ] + [I] [ 1 ] * [I- 1 ] [ 1 ]。 24 他 F [i]が[ 1 ] = F [I- 1 ] [ 1 ]。 25 もし(I == 2)F [ 2 ] [ 1 ] - = F [ 1 ] [ 1 ]。 26 } 27 のために(INT iが= 2 ; I <= N; I ++ ) 28 のための(INT J = 2、J <= M; J ++){ 29 IF((J + I)%2 == 0)// 奇数ステップを行く 30 F [I] [J] =分(F [I- 1 ] [J]、F [I] [J- 1 ]); 31である 他 //はさえステップ行く 32 F [I] [J] =分(F [I- 1 ] [J] + [I- 1 ] [J] * [I] [J] 、F [I]、[J- 1 ] + A [I]、[J- 1 ] * A [I] [J]); 33である } 34で のprintf(" %のD \ N- " 、F [N-] [M]) ; 35 } 36 リターン 0; 37 }