38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
const inst: number[] = require("fs").readFileSync(0).toString().trim().split(" ").map(Number);
|
|
const steps: number = inst.length - 1;
|
|
|
|
const force: number[][] = [
|
|
[1,2,2,2,2],
|
|
[0,1,3,4,3],
|
|
[0,3,1,3,4],
|
|
[0,4,3,1,3],
|
|
[0,3,4,3,1]
|
|
];
|
|
|
|
let dp: number[][][] = Array.from( {length: 2}, (_, i) =>
|
|
Array.from({length: 5}, () =>
|
|
Array.from({length: 5}, () =>
|
|
i===1 ? 0 : Infinity
|
|
)
|
|
)
|
|
);
|
|
|
|
let currentIsZero: boolean = true;
|
|
|
|
for(let i=steps-1; i >= 0; i--) {
|
|
const current: number = currentIsZero ? 0 : 1;
|
|
const next: number = currentIsZero ? 1 : 0;
|
|
const target: number = inst[i];
|
|
|
|
for(let l=0; l<5; l++) {
|
|
for(let r=0; r<5; r++) {
|
|
const moveLeft: number = dp[next][target][r] + force[l][target];
|
|
const moveRight: number = dp[next][l][target] + force[r][target];
|
|
dp[current][l][r] = Math.min(moveLeft, moveRight);
|
|
}
|
|
}
|
|
|
|
currentIsZero = !currentIsZero;
|
|
}
|
|
|
|
console.log(dp[currentIsZero ? 1 : 0][0][0]); |