HDU-1584 蜘蛛牌(dfs)
可以多看看。
蜘蛛牌
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1206 Accepted Submission(s): 476
//此题目,有几个值得学习的地方,一:i和x的互换。二是ans,没有ans就不行,不知道什么原因。
#include<stdio.h>
#include<math.h>
int visit[],a[],ans;
void dfs(int t,int sum)//t代表已经移动了几张牌,sum代表目前移动耗费的步数
{
int i,j;
if(sum>=ans)return;//这个剪枝是为什么要这样做,我还是搞不懂.
if(t==)//只用移动9次 10是固定不变的
{
ans=sum;
return;
}
for(i=;i<;i++)
{
if(visit[i]==)
{
visit[i]=;//标记用过了。
for(j=i+;j<=;j++)//这个用来确定i牌要移到什么位置
{
if(visit[j]==)//比如要移1了,如果2,3,4,5都已经被移动过了 那么这几张牌必定叠放在6的下面,所以要移到6的位置
{
dfs(t+,sum+abs(a[j]-a[i]));
break;
}
}
visit[i]=;//这里回溯
}
}
}
int main()
{
int n,i,x;
scanf("%d",&n);
while(n--)
{
for(i=;i<;i++)
{
scanf("%d",&x);
a[x]=i;//一:牌面为i的牌所在的位置
visit[i]=;
}
ans=;//为什么要这样定义ans;
dfs(,);
printf("%d\n",ans);
}
return ;
} 第一次做的时候,我理解题意是: 先找到牌1再找牌2.。。一直找到牌10 所以我的代码:
就总是wa了,我犯的错误如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
int vist[];
int a[];
int s;
void dfs(int i)
{
int j,f;
for(j=;j<;j++)
{
if(a[j]-==a[i]&&vist[j]==)
{
vist[j]=;
f=j;
s+=abs(i-j);
dfs(f);
vist[j]=;
}
}
}
int main()
{
int t,i;
scanf("%d",&t);
while(t--)
{
s=;
memset(vist,,sizeof(vist));
for(i=;i<;i++)
scanf("%d",&a[i]);
for(i=;i<;i++)
if(a[i]==)
dfs(i);
printf("%d\n",s);
}
return ;
}
HDU-1584 蜘蛛牌(dfs)的更多相关文章
- (step4.3.9)hdu 1584(蜘蛛牌——DFS)
题目大意:本体是中文题,可以直接在OJ上看 /* * 1584_2.cpp * * Created on: 2013年8月22日 * Author: Administrator */ #include ...
- HDU 1584(蜘蛛牌 DFS)
题意是在蜘蛛纸牌的背景下求 10 个数的最小移动距离. 在数组中存储 10 个数字各自的位置,用深搜回溯的方法求解. 代码如下: #include <bits/stdc++.h> usin ...
- HDU 1584 蜘蛛牌
题解:纸牌只能移到比其大一的纸牌上,所以移动方向是定的,那么,就只有选择移动先后的问题了,对于决定要移的纸牌,比如1,如果2,3,4都是visited的状态,那么1一定是要移动到5的,因为2,3,4一 ...
- HDU1584:蜘蛛牌(DFS)
Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...
- 蜘蛛牌 (DFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1584 全部状态都判断一遍 代码: #include <stdio.h> #include ...
- hdu 1584 蜘蛛纸牌
把小的牌放到大的牌上,求最小移动的距离和 DFS遍历所有的可能,把每一张牌与之要移动的牌都进行两层for的循环,注意回溯条件满足立刻break 代码(算法借鉴) #include <bits/s ...
- 蜘蛛牌(hdu 1584 DFS)
蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- D - 蜘蛛牌
Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Pract ...
- F - 蜘蛛牌(深度搜索)
Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...
随机推荐
- hdu1151 Air Raid
http://acm.hdu.edu.cn/showproblem.php?pid=1151 增广路的变种2:DAG图的最小路径覆盖=定点数-最大匹配数 #include<iostream> ...
- Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
在线程中出现这种错误的原因是多次启动start() 解决方法: 将start()改成 run()
- 应用程序出现挂死,.NET Runtime at IP 791F7E06 (79140000) with exit code 80131506.
工具出现挂死问题 1.问题描述 工具出现挂死问题,巡检IIS发现以下异常日志 现网系统日志: 事件类型: 错误 事件来源: .NET Runtime 描述: Application: Di ...
- 银联接口(注意项&备忘)
1,参考文档“证书下载.导出及上传流程.docx” 按照文档上所述,依次进行,导出的证书备用,用于配置文件的项“const SDK_ENCRYPT_CERT_PATH” 2,使用tp框架 新建一个控制 ...
- Sina App Engine(SAE)入门教程(7)- Storage使用
参考阅读 sae storage api 文档 Storage 说明文档 Storage 大文件上传说明 storage是什么? 因为sae禁用了代码环境的本地读写,但是在网站运行的过程中,必定会出现 ...
- React-Flux 介绍及实例演示
一.Flux架构 二.例子 1.TodoApp.react.js /** * Copyright (c) 2014-2015, Facebook, Inc. * All rights reserved ...
- CString, QString, char*之间的转换(包括VC编译开关)
传给未分配内存的const char* (LPCTSTR)指针. CString cstr(asdd); const char* ch = (LPCTSTR)cstr; ch指向的地址和cstr相同. ...
- 在CentOS 6.X 上面安装 Python 2.7.X
在CentOS 6.X 上面安装 Python 2.7.X CentOS 6.X 自带的python版本是 2.6 , 由于工作需要,很多时候需要2.7版本.所以需要进行版本升级.由于一些系统工具和服 ...
- DNSget Ip
var address = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(a => a.AddressFamily ...
- HDU 4675 GCD of Sequence(容斥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4675 题意:给出n,m,K,一个长度为n的数列A(1<=A[i]<=m).对于d(1< ...