HDU 5569マトリックス

トピックポータル

中国語の翻訳:

問題解決のアイデア:

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、0x3f3f3fsizeof (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 }

おすすめ

転載: www.cnblogs.com/lipeiyi520/p/12203386.html