/*
分析:
分治。
分治依旧那么犀利。Cal(a,b)(a<=b)表示把a到b排列好,并放
在b的初始位置,所需要移动的最小格数。
2013-03-20
*/
#include"iostream" #include"cmath" using namespace std; const int N=11; int dis[N][N]; int Cal(int a,int b) { if(abs(a-b)<=1) return dis[a][b]; int i,temp,min=111111; for(i=a;i<b;i++) { temp=Cal(a,i)+Cal(i+1,b)+dis[i][b]; if(temp<min) min=temp; } return min; } int main() { int T; int i,l; int pos[N]; scanf("%d",&T); while(T--) { int temp; for(i=1;i<=10;i++) {scanf("%d",&temp);pos[temp]=i;} for(i=1;i<=10;i++) for(l=1;l<=10;l++) dis[i][l]=abs(pos[i]-pos[l]); printf("%d\n",Cal(1,10)); } return 0; }