hdu 1584 蜘蛛牌

陷入了思维误区,以为要用数组下标来记录牌的位置,看了别人的代码才发现是要用数组的值来记录牌的位置,转过这道弯之后就是道水题了

#include<iostream>
#include<cmath>
#include<cstring>
#define maxn 10+2
using namespace std;
int mapp[maxn],visit[maxn];
int re;
void dfs(int t,int sum)
{
	if(t==9){re=min(re,sum);return;}
	if(sum>re){return;}
	for(int i=1;i<=10;i++)
	{
		if(!visit[i])
		{
			for(int j=i+1;j<=10;j++)
			{
				if(!visit[j])
				{
					int summ=sum+abs(mapp[j]-mapp[i]);
					visit[i]=1;
					dfs(t+1,summ);
					break;
				}
			}
			visit[i]=0;
		}
	}
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int x;
		for(int i=1;i<=10;i++)
		{
			cin>>x;
			mapp[x]=i;
		}
		re=1<<20;
		memset(visit,0,sizeof(visit));
		dfs(0,0);
		cout<<re<<endl;
	}
	return 0;
} 
时间: 2024-08-04 18:42:11

hdu 1584 蜘蛛牌的相关文章

HDU 1584(蜘蛛牌 DFS)

题意是在蜘蛛纸牌的背景下求 10 个数的最小移动距离. 在数组中存储 10 个数字各自的位置,用深搜回溯的方法求解. 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int ans,a[20]; 4 bool vis[20]; 5 void dfs(int num,int sum) 6 { 7 if(sum > ans) return; 8 if(num == 9) 9 { 10 ans = sum; 11 return

【DFS】hdu 1584 蜘蛛牌

看代码: #include <iostream> #include <cstdio> #include <fstream> using namespace std; const int INF=100000000; const int MAXN=1000000; int ans; int pos[11]; bool vis[11]; int abs(int a,int b){ if(a>b)return a-b; return b-a; } void dfs(in

hdu 1584 蜘蛛纸牌

题意:小牌叠在大牌上,问叠成一堆的最小移动距离 思路:将所有状况进行一次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个情况进行穷举 { i

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

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

hdu 1584 dfs+剪枝

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

蜘蛛牌

蜘蛛牌 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 蜘蛛牌 DFS 简单题

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

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最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也