【题目描述】

汉诺塔升级了:现在我们有?个圆盘和?个柱子,每个圆盘大小都不一样,

大的圆盘不能放在小的圆盘上面,?个柱子从左到右排成一排。每次你可以将一

个柱子上的最上面的圆盘移动到右边或者左边的柱子上 (如果移动之后是合法的

话) 。 现在告诉你初始时的状态, 你希望用最少的步数将第?大的盘子移动到第?根

柱子上,问最小步数。

【输入格式】

第一行一个正整数?,代表询问的组数。

接下来?组数据,每组数据第一行一个整数?。

接下来一行每行?个正整数,代表每个柱子上圆盘的大小。

【输出格式】

输出共?行,代表每次的答案。如果方案不存在,输出“−1” 。

【样例输入】

4

3

2 1 3

2

7 8

2

10000 1000

3

97 96 95

【样例输出】

4

0

-1

20

【样例解释】

无。

【数据范围与规定】

对于70%的数据,N的值都是相等的。

对于100%的数据,1 ≤ T ≤ 6 × 10^3 ,1 ≤ N ≤ 7。

/*
这个题改了n个小时了,最后还是看的题解……
刚开始从初始状态向目标状态找的,30分,TLE
后来又从目标状态向初始状态找,把每种情况的步数走记下来,查询就简单了,结果全TLE了,看的题解,原来是我的每个状态记得东西太多了,导致常数太大,其实只要记录每个数在哪个位置,还有每个位置的顶部是哪个数就好了。
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define M 10000000
using namespace std;
int n,top[],pos[],res[M],q[M],bit[],head,tail,w[],num[];
bool use[M];
bool cmp(int a,int b)
{
return w[a]<w[b];
}
void work(int s)
{
int x=;
int ss=s;
for(int a=;a<=;a++)
top[a]=;
while(ss)
{
x++;
pos[x]=ss%;
ss/=;
}
reverse(pos+,pos+x+);//倒置
for(int a=x;a>=;a--)
top[pos[a]]=a;
for(int a=;a<=x;a++)
if(a==top[pos[a]])
{
int p=pos[a];
if (p!=&&(a<top[p-]||!top[p-]))
{
int news=s-bit[x-a];
if(!use[news])
{
q[++tail]=news;
use[news]=true;
res[news]=res[s]+;
}
}
if(p!=x&&(a<top[p+]||!top[p+]))
{
int news=s+bit[x-a];
if(!use[news])
{
q[++tail]=news;
use[news]=true;
res[news]=res[s]+;
}
}
}
} int main()
{
//freopen("huakai.in","r",stdin);
//freopen("huakai.out","w",stdout);
head=,tail=;
int status=;
bit[]=;
for (int i=;i<=;i++)
{
bit[i]=bit[i-]*;
status=status*+i;
q[++tail]=status;
use[status]=true;
}
while(head<=tail)
{
int s=q[head++];
work(s);
}
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&w[i]),num[i]=i;
sort(num+,num+n+,cmp);
int s=;
for (int i=;i<=n;i++)
s=s*+num[i];
if (!use[s]) printf("-1\n");
else printf("%d\n",res[s]);
}
return ;
}

PA的更多相关文章

  1. 2.1 CMMI2级——7个PA简述

    摘要: 阶段式的CMMI没有1级,最开始的级别就是2级.一个处于“无序化”生产的软件公司,要进行过程改进,首要是改进什么呢?2级告诉你,我们需要从计划.计划跟踪.需求管理.采购.度量.配置管理.质量保 ...

  2. [RouterOS] ROS对接碧海威或PA等流控实现完美流控详细教程(附脚本全免费)

    前言: 经常在群里看到不少朋友争论海蜘蛛 ROS 维盟 爱快 碧海威 流控大师 Woyos等等软路由,哪个好.实际上,网络产品是复杂的,现在的软路由功能上已经远远不是单独的路由了.每种产品都有他本身的 ...

  3. 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统

    PA接口在早前就发布了,但是一直迟迟没有发布官方说明文档,由于最近问的客户较多,特写了这篇文档 由于PA使用标准radius认证协议,所以用户需要在本地搭建一个计费,由于大部分用户的数量只有几百个,不 ...

  4. LNA和PA

    低噪声放大器(Low Noise Amplifier) -------------LNA 功率放大器(Power Amplifier)---------------------PA LNA是低噪声放大 ...

  5. 有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a

    题目:有两个指针pa,pb分别指向有两个数,a,b,请写一个函数交换两个指针的指向,也就是让pa指向b,让pb指向a,具体实现如下: #include<stdlib.h> #include ...

  6. 清北学堂 Pa

    PA[题目描述]汉诺塔升级了:现在我们有?个圆盘和?个柱子,每个圆盘大小都不一样,大的圆盘不能放在小的圆盘上面,?个柱子从左到右排成一排.每次你可以将一个柱子上的最上面的圆盘移动到右边或者左边的柱子上 ...

  7. CMMI-4中19个PA的大致描述

    组织过程资产库下面有组织级标准过程库, 这个库里一共有19各PA(就是标准过程啦) PA的英文是Process Area       CM(配置管理过程,英文是Configuration Manage ...

  8. PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)

    录入预算报错时报错: 分析:这个错误是select into 语句返回多行的结果,但具体在哪? 两种方法查找,trace 或者debug 1.trace 启用调试 获取trace文件 -bash-3. ...

  9. PA 项目关联项目经理

    ---- 项目关联项目经理 DECLARE p_project_id NUMBER := 155233; l_project_role_id NUMBER := ''; p_employee_id N ...

  10. 每日PA -2019年1月帖-每天更新

    开篇 "每日PA"有什么亮点?

随机推荐

  1. C#文件复制功能

    目的是将用户自定义文件复制到指定文件夹并且能查看该文件,下面是个人做的源码: sing System; using System.Collections.Generic; using System.C ...

  2. node相关的精典材料

    node.js电子书 了不起的Node.js 深入浅出Node.js node.js入门经典 node.js开发指南 node.js相关优秀博文 官网 Infoq深入浅出Node.js系列(进阶必读) ...

  3. 【wget】一条命令轻松备份博客(包括图片)

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  4. Python socket编程之四:模拟分时图

    建立 socket,先运行服务器,再运行客户端,建立连接后服务器从本地数据库调数据一截一截地发送给客户端,客户端接受数据绘图模拟分时图 1.socket # -*- coding: utf-8 -*- ...

  5. Javascript检测用户注册信息

    <html> <head> <title>用户注册</title> <meta http-equiv="content-type&quo ...

  6. C++_Eigen函数库用法笔记——Matrix and Vector Arithmetic

    Addition and subtraction Scalar multiplication and division Transposition Matrix-matrix and matrix-v ...

  7. C# 反射创建对象,包括创建引用外部程序集类的实例

    #region 根据对象名成创建对象 /// <summary> /// 根据对象名成创建对象 /// </summary> /// <param name=" ...

  8. Ajax相同url的请求,IE缓存问题

    最近做一个小项目,其中的一个页面如下,需要实现异步改变“是否推荐”的状态. 请求的代码如下: $.get("/Contorller/Edit", { id: id }, funct ...

  9. Jquery Validate 正则表达式实用验证代码

    jQuery.validate 的正则验证功能,包括手机号码.电话号码.邮政编码.QQ号码.IP地址.字母和数字.中文的验证等. 手机号码验证 以下为引用内容:  jQuery.validator.a ...

  10. Minimum Inversion Number

    Minimum Inversion Number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...