https://codeforces.com/contest/1065/problem/E

题目很长,大意是一个棋盘N*N,N<=10,每个格子一个[1,N*N]的不同数字

3种棋子:车,马,主教

开局放1个棋子到1号格子

2种操作:变成另一种棋子,或者移动棋子

求1->2->3....->N*N的最小操作数,并求出操作数最小时,最小变换数

 

恶心的模拟题,但是我有一个启发:

使用dp[n][i]表示到达n号格子时状态为i的最小状态(操作数和变换数)

则j∈[0,2],k∈[0,2],表示从n-1号格子的j棋子,使用k棋子跑中间路程

dp[n][i]=min(dp[n][i],

{

calc(point[i-1],point[i],k) + dp[n-1][j].first +(i!=k) + (j!=k) 

,

dp[n-1][j].second+ (i!=k) +(j!=k)

}