标签:
#include <stdio.h> #include <iostream> using namespace std; int abs(int a) { return a > 0 ? a : (-a); } int vis[11], p[11], bs, step; void dfs(int t) { if(t == 10) { bs = step; // bs存放临时的最值 return; } int i, j; for(i = 1; i < 11; ++i)//i代编牌的面值 { if(!vis[i])//如果这张牌没被挪动 { for(j = i+1; j < 11; ++j)//找到离第一张牌最近的面值最小的一摞牌 if(!vis[j]) { step += abs(p[i] - p[j]); if(step < bs) { vis[i] = 1; dfs(t+1); vis[i] = 0; } step -= abs(p[i] - p[j]); break; } } } } int main() { int t, a; scanf("%d", &t); while(t--) { for(int i = 1; i < 11; ++i) { scanf("%d", &a); p[a] = i;//p数组存放面值为a的牌的位置序号 vis[i] = 0;//所有牌都没有被移动 } bs = 10000; //把所需移动的步伐数初始为最大 step = 0; dfs(1); printf("%d\n", bs); } }
标签:
原文地址:http://www.cnblogs.com/rain-1/p/4758624.html