码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1584 蜘蛛纸牌

时间:2017-03-31 14:27:34      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:穷举   优化   space   最小   oid   main   name   范围   nbsp   

题意:小牌叠在大牌上,问叠成一堆的最小移动距离

思路:将所有状况进行一次DFS

 

 

 

 

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
int a[11];
int s;
int vis[11];
void dfs(int k,int ans)
{
if(ans>s)return ;//优化
if(k==10)//出口
{
if(ans<s)
s=ans;
return;
}
for(int i=1;i<=9;i++)//对函数10个情况进行穷举
{
if(!vis[i])
{vis[i]=1;//对已经用过的标记
for(int j=i+1;j<=10;j++)//对结果进行处理,这里是找到就处理,再跳出。
{
if(!vis[j])
{
dfs(k+1,ans+((j-i)>0?j-i:i-j));//缩小范围,在此举例子
break;
}

} vis[i]=0;//在这个用过后进行回溯,注意实在和子问题的下面,不能出范围,
}

}

}
int main()
{
int n;
cin>>n;
while(n--)
{
s=6555535;
int i; memset(vis,0,sizeof(vis));
for(i=1;i<=10;i++)//储存方式的改变·~~
{
int b;
cin>>b;
a[b]=i;;
}
dfs(1,0);
cout<<s<<endl;
}
return 0;
}

hdu 1584 蜘蛛纸牌

标签:穷举   优化   space   最小   oid   main   name   范围   nbsp   

原文地址:http://www.cnblogs.com/ddddacmer/p/6651177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!