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的一种操作系统.主要用于服务器,特别是网络服务 ...
随机推荐
- O2O迈进智能时代 百度构建“服务生态”
经历过山车式资本市场后,O2O领域正努力摆脱“低门槛”,或将迎来技术创新之争.在刚刚落幕的百度世界大会上,百度副总裁.百度糯米总经理曾良宣布:将以百度糯米.手机百度和百度地图为核心构建百度服务生态.在 ...
- CSS继承
不可继承的:display.margin.border.padding.background.height.min-height.max-height.width.min-width.max-widt ...
- 多态与异常处理ppt作业
1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 答:1.抛出异常 当程序发生异常时,产生一个异常事件,生成一个异常对象,并把 ...
- Windows性能优化关键点-Windows Performance tuning important settings
最近重装了windows8系统,发现性能差得很,远不如官方说的比win7好很多的说法.经过几个关键配置的调整,终于找回电脑原来的风采. 下面总结一下,希望对大家有帮助: 1. 检查windows服务, ...
- 在centos配置nginx+php的环境
环境版本:centos6.8/nginx1.10.2/php5.6.29 ====================安装nginx1.10.2==================== #根据centos ...
- Backbone入门讲解
Backbone是一个实现了web前端mvc模式的js框架. 一种解决问题的通用方法,我们叫做模式. 设计模式:工厂模式,适配器模式,观察者模式等,推荐js设计模式这本书.设计模式是一种思想. 框架模 ...
- table 细边框
table { border-collapse: collapse; border: none; width: 200px; } td { border: solid #000 1px; }
- 因为此版本的应用程序不支持其项目类型(.csproj)”之解
有的时候vs无缘无故的出现如下错误:"因为此版本的应用程序不支持其项目类型(.csproj),若要打开它,请使用支持此类型项目的版本" 解决办法:如果是这个提示,可能是由于你安装m ...
- C# 模拟键盘操作--SendKey(),SendKeys()
模拟键盘输入就是使用以下2个语法实现的.SendKeys.Send(string keys); //模拟汉字(文本)输入SendKeys.SendWait(string keys); //模拟按键输 ...
- 我的VPN推荐经历
先说说我为什么会走上VPN推荐之路的. 忘记了什么原因需要上某一国外的网站,但是这个网站在国内被禁止访问,于是我想到了VPN,我在网上搜索VPN,找到了几个VPN推荐的博客,然后我根据博客的推荐到了某 ...