蜘蛛牌------和 上一个 戒指 差不多

.....然而 还是  不会  , 看别人的程序看了半天   自己 也是仅仅能模仿一下 ,   不懂到底是咋回事////////还是要看的  先附上  题目和代码

 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int vis[11],p[11],bs,step;
 6 void DFS(int t) //  寻找 第一个 需要移动的  卡片
 7 {
 8     int i,j;
 9     if(t==10)    //
10     {
11         bs=step;  //  10 张牌  都找到  自己的   移动先后顺序之后记下来  跳出去 就行了
12         return ;
13     }
14     for(i=1;i<11;i++)
15     {
16         if(!vis[i])
17         {
18             for(j=i+1;j<11;j++)     //   i+1 的 原因  是  控制将较小的 放到  较大的 上面
19             {
20                 if(!vis[j])                     //没有    被用
21                 {
22                     step+=abs(p[i]-p[j]);          //  加上这一次 移动的步数
23                     if(step<bs)
24                     {
25                         vis[i]=i;            //  进去  将 牌 标记为 已用
26                         DFS(t+1);                   //  开始寻找 下一次移动的 排
27                         vis[i]=0;
28                     }
29                     step-=abs(p[i]-p[j]);
30                     break;
31                 }
32             }
33         }
34     }
35 }
36 int main()
37 {
38     int t,a;
39     scanf("%d",&t);
40     while(t--)
41     {
42         for(int i=1;i<11;i++)
43         {
44             scanf("%d",&a);
45             p[a]=i;  //  储存下来 每一张牌的位置
46             vis[i]=0;     //  没有被用的 牌 记为 0 .
47         }
48         bs=1000000;
49         step=0;
50         DFS(1);    //    开始  寻找 第一个 需要移动的 卡片
51         printf("%d\n",bs);
52     }
53
54 }
时间: 2024-11-05 02:36:31

蜘蛛牌------和 上一个 戒指 差不多的相关文章

ACM学习历程—HDU1584 蜘蛛牌(动态规划 &amp;&amp; 状态压缩)

Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离. Input 第一个输入数据是T,表示数据的组数.

HDU1584 蜘蛛牌 DFS 简单题

题意: 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离. 输入: 第一个输入数据是T,表示数据的组数.每组数据有一行,10

蜘蛛牌

蜘蛛牌 Time Limit: 5000ms                                           Memory Limit: 32768KB 64-bit integer IO format:      Java class name: 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为

F - 蜘蛛牌

Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离. Input 第一个输入数据是T,

HDU1584(蜘蛛牌)

蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2880    Accepted Submission(s): 1230 Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也

线上一个简单检测Ping状态的邮件报警脚本

Step1.安装sendmail来发邮件 # yum -y install sendmail # /etc/init.d/sendmail start # chkconfig sendmail on Step2.安装邮件客户端 # yum -y install mutt 2.1添加发件人信息,如下 # vim /etc/Muttrc set charset="utf-8"           #设置发邮件编码 set envelope_from=yes set rfc2047_para

该进程或线程自上一个步骤以来已更改

相关解决办法如下: VS进行高度时,断点处提示"该进程或线程自上一个步骤以来已更改" 每个断点跑两遍似的. 这个是由于在VS环境中 勾上了 "工具\选项--->调试--要求源文件与原始版本完全匹配"这个项 该进程或线程自上一个步骤以来已更改 英文表述:The process or thread has changed since last step 以下是是从网上摘录的解决办法. Q: I have a console application that exe

获取第上一个兄弟元素 屏蔽浏览器的差异(PreviousElementSibling)

//获取element上一个兄弟元素 function getPreviousElementSibling(element){ //能力检测 判断是否支持PreviousElementSibling if(element.previousElementSibling){ return element.previousElementSibling; }else{ //获取上一个兄弟节点 var node = element.previousSibling; //如果没有上一个节点,此时null w

返回数据给上一个活动

我们都知道,android开发中一个活动跳转时是可以带数据传递给下一个活动的,那么能不能够返回数据给上一个活动呢?答案是肯定的.不过不同的是,返回上一个活动只需要按一下Back键就可以了,并没有一个用于启动活动Intent来传递数据.通过查阅文档你会发现,Activity中还有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能返回一个结果给上一个活动.毫无疑问,这就是我们所需要的. startActivityForResult()方法接收