競技プログラミングのためのF#入門
1 2 3 |
|
いわゆる区間DPです. 改めてHaskellコードもあさったところ, やはり命令型の方が読み書きしやすいように思います.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Array.iter
を使った部分をArray.fold
に変えたり, もう少し関数型らしく書ける部分はあります. 今の私にとっての読み書きしやすさ, そして多少のパフォーマンスのバランスを取って現状はこのコードを採用しました.
ここで紹介したコードは最終的に対角成分に結果の候補が積まれるため, その中で最大値を取ります.
1 2 3 4 5 |
|
score l r Ia.[l]
, score l r Ia.[r-1]
¶取り除く順番 | 得点 |
---|---|
1,2,3,4 | 20+30+0+0=50 |
1,2,4,3 | 20+30+0+0=50 |
1,4,2,3 | 20+40+0+0=60 |
1,4,3,2 | 20+30+0+0=50 |
4,3,2,1 | 10+40+0+0=50 |
4,3,1,2 | 10+40+0+0=50 |
4,1,2,3 | 10+30+0+0=40 |
4,1,3,2 | 10+40+0+0=50 |