题解:纸牌只能移到比其大一的纸牌上,所以移动方向是定的,那么,就只有选择移动先后的问题了,对于决定要移的纸牌,比如1,如果2,3,4都是visited的状态,那么1一定是要移动到5的,因为2,3,4一定是全在5上了,清楚这一点,这道题就变得很简单的:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 |
#include <cstdio> #include <iostream>using
namespace std;int V[15],a[15],ans;void
dfs(int
now,int
step){ if
(now>=ans) return; if
(step==9){ans=now;return;} for(int
i=1;i<10;i++) if(!V[i]){ for(int
j=i+1;j<=10;j++){ if(!V[j]){ V[i]=true; dfs(now+abs(a[i]-a[j]),step+1); break; } } V[i]=false; }}int
main(){ int
T,sit; scanf("%d",&T); while(T--) { ans=999999999; for(int
i=1;i<=10;i++) { scanf("%d",&sit); a[sit]=i; } memset(V,false,sizeof(V)); dfs(0,0); printf("%d\n",ans); }} |
原文:http://www.cnblogs.com/forever97/p/3542802.html