1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #define SIZE 9
  6. #define MAXLEN 6
  7.  
  8. int data[SIZE][MAXLEN];
  9. int numberLen[SIZE];
  10. int overlapLen[SIZE+1][SIZE+1];
  11.  
  12. void IToA(int N ,int row) //数字转换为数组
  13. {
  14. int tmp=N;
  15. int i=0;
  16. while(tmp)
  17. {
  18. i++;
  19. tmp/=10;
  20. }
  21. numberLen[row]=i;
  22. tmp=N;
  23. for(int j=i-1;j>=0;j--)
  24. {
  25. data[row][j]=tmp%10;
  26. tmp/=10;
  27. }
  28. }
  29.  
  30. void getOverlapLen(int i,int j) //计算两个数字的最小重叠长度
  31. {
  32. for(int len=1;len<=numberLen[i]&&len<=numberLen[j];len++)
  33. {
  34. int match=1;
  35. for(int m=numberLen[i]-len,n=0;m<numberLen[i]&&n<numberLen[j];m++,n++)
  36. {
  37. if(data[i][m]!=data[j][n])
  38. {
  39. match=0;
  40. break;
  41. }
  42. }
  43.  
  44. if(match)
  45. {
  46. overlapLen[i][j]=len;
  47. break;
  48. }
  49. }
  50. }
  51.  
  52. int maxLen=0;
  53. int used[SIZE];
  54.  
  55. void getMaxLen(int step ,int numbers,int curlen,int remainingLen,int preNumber)
  56. {
  57. if(step==numbers)
  58. return ;
  59. if(curlen+remainingLen-numbers+step+1<=maxLen)
  60. return;
  61.  
  62. for(int i=0;i<numbers;i++)
  63. {
  64. if(!used[i])
  65. {
  66. used[i]=1;
  67. int tmpLen=curlen;
  68.  
  69. if(overlapLen[i][preNumber]==0&&step!=0) //连接成功
  70. {
  71. used[i]=0;
  72. continue;
  73. }
  74.  
  75. curlen+=numberLen[i]-overlapLen[i][preNumber];
  76. if(maxLen<curlen)
  77. maxLen=curlen;
  78. getMaxLen(step+1,numbers,curlen,remainingLen-numberLen[i],i);
  79.  
  80. used[i]=0;
  81. curlen=tmpLen;
  82.  
  83. }
  84. }
  85. }
  86.  
  87. void main()
  88. {
  89. //freopen("in.txt","r",stdin);
  90. int nTc;
  91. cin>>nTc;
  92. for(int tc=0;tc<nTc;tc++)
  93. {
  94. int N;
  95. cin>>N;
  96. maxLen=0;
  97. for(int i=0;i<N;i++)
  98. {
  99. used[i]=0;
  100. for(int j=0;j<N;j++)
  101. {
  102. data[i][j]=0;
  103. overlapLen[i][j]=0;
  104. }
  105. }
  106.  
  107. int temp;
  108. int totalLen=0;
  109. for(int i=0;i<N;i++)
  110. {
  111. cin>>temp;
  112. IToA(temp,i);
  113. totalLen+=numberLen[i];
  114.  
  115. }
  116.  
  117. for(int i=0;i<N;i++)
  118. {
  119. for(int j=0;j<N;j++)
  120. {
  121. if(i!=j)
  122. getOverlapLen(i,j);
  123. }
  124. }
  125.  
  126. getMaxLen(0,N,0,totalLen,SIZE);
  127. cout<<maxLen<<endl;
  128. }
  129. }

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. HBase的伪分布式安装(原创)

    准备工作: 1)安装了伪分布式hadoop:参照http://blog.csdn.net/zolalad/article/details/11472207 2)修改已安装好的hadoop配置文件: a ...

  2. Java命令

    java -classpath, 设定要搜索的类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有的CLASSPATH的设定. 由于所要执行的类也是要搜索的类的一部分, ...

  3. Android异常:唤醒锁未授权。(Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android.permission.WAKE_LOCK.)

    Android异常:Caused by: java.lang.SecurityException: Neither user 10044 nor current process has android ...

  4. linux系统PXE+Kickstart自动安装系统

    一.PXEPXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...

  5. mysql系统数据库

    mysql系统数据库主要存储了一些存储MySQL服务的系统信息表.一般情况下mysql库的表都是MYASIM引擎,除非个别情况.mysql库的表的作用大致可以分为以下几类: (1)授权系统表 (2)系 ...

  6. No permission to write APN settings: Neither user *** nor current process has android.permission.WRITE_APN_SETTINGS.

    在ICS40以前的版本中,如果程序需要设置APN,只需要在AndroidManifest文件中声明这个权限即可.在40的机器上运行则会抛出以下异常:java.lang.SecurityExceptio ...

  7. MFC 给对话框注册热键

    在头文件中添加: //}}AFX_MSGafx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);//(此行为加入的)BEGIN_MESSAGE_MA ...

  8. WinForm中WebBrowser的使用

    最近由于工作需要,研究了下Winform的WebBrowser控件,在这里给大家分享下. 1.WebBrowser导航 WebBrowser在进行导航的时候需要用到Navigate(string ur ...

  9. MIME Type

    一.首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash --那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME ...

  10. 国内npm镜像源推荐及使用

    NPM(Node Package Manager),是NodeJs的模块依赖管理工具.由于Npm源在国外,使用起来不方便, 故需要国内可靠的npm源可以使用,现整理如下: 一.国内镜像 1.淘宝NPM ...