
/* Name: hdu--1548--蜘蛛牌 Author: shen_渊 Date: 17/04/17 09:15 Description: dfs,不好想,看两个大神的代码好久http://www.cnblogs.com/sook/archive/2011/03/27/1996775.html http://blog.csdn.net/cscj2010/article/details/7364010 */ #include<iostream> #include<algorithm> #include<cstring> using namespace std; void dfs(int); ],p[]; int ans,ct; int main(){ // freopen("in.txt","r",stdin); ios::sync_with_stdio(false); int t;cin>>t; while(t--){ memset(vis,,sizeof(vis)); memset(p,,sizeof(p)); ans = 0xffffff;//0在第一次递归排完之前不能停 ct = ; ; i<; ++i){//p[a] 的位置为i int a;cin>>a; p[a] = i; } dfs(); cout<<ans<<endl; } ; } void dfs(int num){//num是牌数 ){ ans = ct; return ; } ; i<; ++i){//i=1全排列不用等于10,毕竟有内循环 if(!vis[i]){ ; k<=; ++k){// k<=10,p[10]是10的位置 可以等 if(!vis[k]){ ct += abs(p[i]-p[k]); if(ans > ct){ vis[i] = ; dfs(num+); vis[i] = ; } ct -= abs(p[i]-p[k]); break; } } } } }