蜘蛛牌 (DFS)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1584

全部状态都判断一遍

代码:

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <ctype.h>
#include <iomanip>
#include <queue>
#include <stdlib.h>
using namespace std; int ans;
int tep[],vis[]; int abs(int x)
{
if(x>=)
return x;
return -x;
} void dfs(int cnt,int sum)
{
if(sum >= ans)
return ;
if(cnt==){
ans=sum;
return ;
}
for(int i=; i<; i++){
if(!vis[i]){
vis[i]=;
for(int j=i+; j<=; j++){
if(!vis[j]){
dfs(cnt+,sum+abs(tep[i]-tep[j]));
break;
}
}
vis[i]=;
}
}
} int main()
{
int t,x;
scanf("%d",&t);
while(t--){
for(int i=; i<=; i++){
scanf("%d",&x);
tep[x]=i;
}
memset(vis,,sizeof(vis));
ans=;
dfs(,);
printf("%d\n",ans);
}
}
上一篇:Lunch Time


下一篇:C# Image Resizer