ADV数字的剪切
#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数字的剪切的更多相关文章
- vim基本命令之剪切复制粘贴替换
首先是剪切(删除): 剪切其实也就顺带删除了所选择的内容,所以既可以当剪切命令用,也可以当删除命令使用. 1 首先,可以在命令模式下输入v进入自由选取模式,选择需要剪切的文字后,按下d就可以进行剪切了 ...
- vim命令的妙用
进来看到了一篇博文,讲述的是无插件Vim编程技巧,然后看到里面还有一些其余的关于vim的博文,感觉值得收藏:酷 壳 – CoolShell.cn 这里挑选出其中一篇,这也是自己已经学习过的: 无插件V ...
- 无插件Vim编程技巧
无插件Vim编程技巧 http://bbs.byr.cn/#!article/buptAUTA/59钻风 2014-03-24 09:43:46 发表于:vim 相信大家看过<简明Vim教程& ...
- vim复制
关于vim复制剪贴粘贴命令的总结 最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删 ...
- 无插件VIM编程技巧(网摘)
无插件VIM编程技巧 原文出处:[陈皓 coolshell] 相信大家看过<简明Vim教程>也玩了<Vim大冒险>的游戏了,相信大家对Vim都有一个好的入门了.我在这里把我日常 ...
- vim编辑
vim 重点在于光标的移动,模式的切换,删除,查找,替换,复制,黏贴,撤销命令的使用 vim的三种模式:命令模式(打开文件默认进入此模式)编辑模式(输入模式)末行模式(按:键进入,只能从命令模式下按键 ...
- vim 命令补充(1)
本篇文章主要教你如何使用 Vim 分屏功能. 分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 f ...
- vi 使用小结
复制 1,ny 从哪行到哪行的复制,中间用逗号隔开,然后命令y. 黏贴 是在命令模式下直接按p即可 跳到n行: 命令模式直接输入数字即可 剪切:d命令 删除:x命令 跳到行首行尾:直接home或end ...
- liunx基础命令
linux的简单介绍 linux是一款免费使用和自由传播的内似于unix的操作系统软件,是一个基于POSI和unix的多用户,多任务,支持多线程和多CPU的一种操作系统.主要用于服务器,特别是网络服务 ...
随机推荐
- Notepad++根据语言类型自动选择对应编译器来编译代码
Notepad++的NppExec插件可以调用好多编译器来编译代码. 比如编译Java: NPP_SAVE javac "$(FULL_CURRENT_PATH)" java -c ...
- php:微信公众号token验证失败原因、验证码显示不出来的问题
ob_clean(); 问题描述: 用微信官方提供的demo验证token是成功的,但是放到自己网站的框架上进行token验证老是提示"token验证失败",经过检查(用生成日志的 ...
- 用EasyWebSvr搭建Axure本地访问地址-转载加完善
1.下载之后解压到任意一个位置,可以是桌面(反正很小不占空间),如图2:: 图2 解压之后文件目录 2.将生成的原型放在EasyWebSvr根目录下的demo之中,如图3所示: 图3 原型文件放置目 ...
- RabbitMQ的work queue(2)
课堂上work queue没能很好的理解,看了大神的博客,顿觉醍醐灌顶,豁然开朗. work queue有两种模式: 平均分配:(默认)//channel.basicQos(1);即把 同一时刻服务器 ...
- Zepto API 学习
1. after, before, append, prepend 的区别 A.after(B) ==== B.insertAfter(A) // B 放在 A 的后面 A.before(B) == ...
- iOS开发XCODE5 SVN配置 使用办法 (转) 收藏一下
标签: xcode5svn xcodesvn使用 xcode自带的svn xcodesvn版本操作 xcode自带svn版本 这两天响应老板要求,把所有代码放到公司的SVN服务器上,按照我的想法肯 ...
- bootstrap datetimerange
天用的了bootstrap日期插件感觉搜索的资料不是很多在此写下一些使用的心得: 插件开源地址:daterangepicker日期控件, 插件使用只要按照开源中的文档信息来就好先包括以下引用: < ...
- SVN冲突解决:当次提交的和上次提交的出现冲突
转载于知蚁博客,文章地址:http://www.letuknowit.com/archives/svn-conflict-resolution 看到那个*了吧,出现这个标记就说明本地副本的文件已经过期 ...
- 分享一个MarkDown的配色主题
  下载地址(戳我)
- MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
MySQL 安装和启动服务,以及遇到的问题 MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5. ...