|
> No.3264[元記事へ]
018
最大経路の和 その1
考察
動的計画法による
(j-1)列 j列
(i-1)段 dp[i-1,j-1] dp[i-1,j]
\ ↓
i段 MAX + a[i,j] → dp[i,j]
(終り)
!LET n=4 !最大値 23
!DATA 3
!DATA 7, 4
!DATA 2, 4, 6
!DATA 8, 5, 9, 3
LET n=15 !最大値 1074
DATA 75
DATA 95, 64
DATA 17, 47, 82
DATA 18, 35, 87, 10
DATA 20, 04, 82, 47, 65
DATA 19, 01, 23, 75, 03, 34
DATA 88, 02, 77, 73, 07, 63, 67
DATA 99, 65, 04, 28, 06, 16, 70, 92
DATA 41, 41, 26, 56, 83, 40, 80, 70, 33
DATA 41, 48, 72, 33, 47, 32, 37, 16, 94, 29
DATA 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14
DATA 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57
DATA 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48
DATA 63, 66, 04, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31
DATA 04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23
DIM A(0 TO n-1, 0 TO n-1)
FOR i=0 TO n-1 !数値を読み込む
FOR j=0 TO i
READ A(i,j)
NEXT j
NEXT i
DIM DP(0 TO n-1, 0 TO n-1)
LET DP(0,0)=A(0,0)
FOR i=1 TO n-1 !i段目
LET DP(i,0)=DP(i-1,0) + A(i,0) !左端
FOR j=1 TO i-1 !j列目
LET DP(i,j)=MAX(DP(i-1,j-1),DP(i-1,j)) + A(i,j)
NEXT j
LET DP(i,i)=DP(i-1,i-1) + A(i,i) !右端
NEXT i
LET ans=0
FOR i=0 TO n-1
LET ans=MAX(ans,DP(n-1,i))
NEXT i
PRINT ans
END
|
|