#include <iostream>

using namespace  std;

#define  SIZE 9
#define  MAXLEN  6

int data[SIZE][MAXLEN];
int numberLen[SIZE];
int overlapLen[SIZE+1][SIZE+1];

void IToA(int N ,int row)   //数字转换为数组
{
	int tmp=N;
	int i=0;
	while(tmp)
	{
		i++;
		tmp/=10;
	}
	numberLen[row]=i;
	tmp=N;
	for(int j=i-1;j>=0;j--)
	{
		data[row][j]=tmp%10;
		tmp/=10;
	}
}

void getOverlapLen(int i,int j)  //计算两个数字的最小重叠长度
{
	for(int len=1;len<=numberLen[i]&&len<=numberLen[j];len++)
	{
		int match=1;
		for(int m=numberLen[i]-len,n=0;m<numberLen[i]&&n<numberLen[j];m++,n++)
		{
			if(data[i][m]!=data[j][n])
			{
				match=0;
				break;
			}
		}

		if(match)
		{
			overlapLen[i][j]=len;
			break;
		}
	}
}

int maxLen=0;
int used[SIZE];

void getMaxLen(int step ,int numbers,int curlen,int remainingLen,int preNumber)
{
	if(step==numbers)
		return ;
	if(curlen+remainingLen-numbers+step+1<=maxLen)
		return;

	for(int i=0;i<numbers;i++)
	{
		if(!used[i])
		{
			used[i]=1;
			int tmpLen=curlen;

			if(overlapLen[i][preNumber]==0&&step!=0)    //连接成功
			{
				used[i]=0;
				continue;
			}	

			curlen+=numberLen[i]-overlapLen[i][preNumber];
			if(maxLen<curlen)
				maxLen=curlen;
			getMaxLen(step+1,numbers,curlen,remainingLen-numberLen[i],i);

			used[i]=0;
			curlen=tmpLen;

		}
	}
}

void main()
{
	//freopen("in.txt","r",stdin);
	int nTc;
	cin>>nTc;
	for(int tc=0;tc<nTc;tc++)
	{
		int N;
		cin>>N;
		maxLen=0;
		for(int i=0;i<N;i++)
		{
			used[i]=0;
			for(int j=0;j<N;j++)
			{
				data[i][j]=0;
				overlapLen[i][j]=0;
			}
		}

		int temp;
		int totalLen=0;
		for(int i=0;i<N;i++)
		{
			cin>>temp;
			IToA(temp,i);
			totalLen+=numberLen[i];

		}

		for(int i=0;i<N;i++)
		{
			for(int j=0;j<N;j++)
			{
				if(i!=j)
				getOverlapLen(i,j);
			}
		}

		getMaxLen(0,N,0,totalLen,SIZE);
		cout<<maxLen<<endl;
	}
}

ADV数字的剪切的更多相关文章

  1. vim基本命令之剪切复制粘贴替换

    首先是剪切(删除): 剪切其实也就顺带删除了所选择的内容,所以既可以当剪切命令用,也可以当删除命令使用. 1 首先,可以在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了 ...

  2. vim命令的妙用

    进来看到了一篇博文,讲述的是无插件Vim编程技巧,然后看到里面还有一些其余的关于vim的博文,感觉值得收藏:酷 壳 – CoolShell.cn 这里挑选出其中一篇,这也是自己已经学习过的: 无插件V ...

  3. 无插件Vim编程技巧

    无插件Vim编程技巧 http://bbs.byr.cn/#!article/buptAUTA/59钻风 2014-03-24 09:43:46 发表于:vim  相信大家看过<简明Vim教程& ...

  4. vim复制

    关于vim复制剪贴粘贴命令的总结   最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删 ...

  5. 无插件VIM编程技巧(网摘)

    无插件VIM编程技巧 原文出处:[陈皓 coolshell] 相信大家看过<简明Vim教程>也玩了<Vim大冒险>的游戏了,相信大家对Vim都有一个好的入门了.我在这里把我日常 ...

  6. vim编辑

    vim 重点在于光标的移动,模式的切换,删除,查找,替换,复制,黏贴,撤销命令的使用 vim的三种模式:命令模式(打开文件默认进入此模式)编辑模式(输入模式)末行模式(按:键进入,只能从命令模式下按键 ...

  7. vim 命令补充(1)

    本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 f ...

  8. vi 使用小结

    复制 1,ny 从哪行到哪行的复制,中间用逗号隔开,然后命令y. 黏贴 是在命令模式下直接按p即可 跳到n行: 命令模式直接输入数字即可 剪切:d命令 删除:x命令 跳到行首行尾:直接home或end ...

  9. liunx基础命令

    linux的简单介绍 linux是一款免费使用和自由传播的内似于unix的操作系统软件,是一个基于POSI和unix的多用户,多任务,支持多线程和多CPU的一种操作系统.主要用于服务器,特别是网络服务 ...

随机推荐

  1. Socket原理与编程基础

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  2. maven增加自定义jar包

    1.博客来源: http://www.cnblogs.com/leiOOlei/p/3356834.html 导入平台SDK的方法 mvn install:install-file -DgroupId ...

  3. SpringMVC学习笔记(六)

    一.SpringMVC文件的上传 1.1.需要导入两个jar包 1.2在SpringMVC配置文件中加入 <!-- upload settings --> <bean id=&quo ...

  4. java多线程的几种实现方式记录

    传统的实现线程的方式为三种,分别为继承Thread类,重写run()方法:实现Runable接口,重写run()方法:实现callable接口,重写call()方法:下面来记录一下最基本的三种编码实现 ...

  5. C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义

    C# 异常:从作用域“”引用了“FiasHostApp.Entity.DBEntity.FIAS_RM_v1.ITraNetMgrUnitBaseInfoRecord”类型的变量“w”,但该变量未定义 ...

  6. gfw列表

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

  7. (转)关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍

    AUTONOMOUS TRANSACTION(自治事务)的介绍 在基于低版本的ORACLE做一些项目的过程中,有时会遇到一些头疼的问题,比如想在执行当前一个由多个DML组成的transaction(事 ...

  8. 如何在真机装linux(本人在台式机上又添了个硬盘)

    首先呢,本人就是小渣渣,所以对于装ubuntu在真机,刚开始真不知道如何下手,以前只是在虚拟机中装过,在经过查阅各种资料后,成功安装,我的台式机本身装的系统win7,是下面就是我安装的过程啦 1. 我 ...

  9. 汉化PLSQL怎么改变字体的大小及关键字颜色

    打开工具---首选项-----编辑器---语法高亮进行设置自己喜欢的颜色---应用--确定 英文版PLSQL:tools----preferences---userinterface项目下的edite ...

  10. 2016国内最值得期待的响应式前端框架pintuer(拼图)--http://www.pintuer.com

    近期,需要将项目从pc端的应用扩展到移动端. 当然移动框架的第一选择必然是bootstrap,但是bootstrap作为移动端明显过于死板,而且作为国外的产品,对于国内的应用明显水土不服.框架里总有那 ...