事先预警:由于我太蒻了,本做法只能在POJ、LOJ等小数据(N<=100)平台上通过,在UVa(洛谷)上大数据并不能通过

戳我获得更好的观看效果

本题不用看,爆搜就是了,但是纯爆搜显然会爆时间,所以要加上一些剪枝

我们来看一下一些常用的剪枝(什么剪枝,其实这么多枝砍掉了,树都没了)

1.最优化剪枝:不存在的,本题求输出方案

2.优化搜索顺序:由于是SPJ,我们对于每个位置上的数字倒着枚举,容易搜索到答案

3.可行性剪枝:需用到数学方法,但是我不会,由于不加该剪枝也能过,所以不讲

最重要的: 卡常

剩下的思路见代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. inline int read(){
  8. char chr = getchar(); int f = 1,ans = 0;
  9. while(!isdigit(chr)) {if(chr == '-') f = -1;chr = getchar();}
  10. while(isdigit(chr)) {ans = (ans << 3) + (ans << 1);ans += chr - '0';chr = getchar();}
  11. return ans* f ;
  12. }
  13. void write(int x){
  14. if(x < 0) putchar('-'),x = -x;
  15. if(x > 9) write(x / 10);
  16. putchar(x % 10 + '0');
  17. }
  18. int n,m;
  19. int ff=0;
  20. int a[50];
  21. int book[500];
  22. void dfs(int x,int m){//当前找到第n个数
  23. if(x==m+1){
  24. if(a[x-1]==n)//由于每个位置我们都用尽量大的数,第一次搜索到的就是答案
  25. ff=1;//标记答案找到了
  26. return;//返回
  27. }
  28. for(int i=n;i>=a[x-1]+1;i--){//枚举第x个位置的数值
  29. if(ff) return;
  30. int fff=0;
  31. for(int j=1;j<=x-1;j++){//判断能否由前面的数字构成
  32. if(i-a[j]>=1 && book[i-a[j]]){
  33. fff=1;
  34. break;
  35. }
  36. }
  37. if(fff){
  38. book[i]=1;
  39. a[x]=i;
  40. dfs(x+1,m);//往下搜
  41. book[i]=0;//回溯
  42. if(ff) return;
  43. }
  44. }
  45. }
  46. int main(){
  47. n=read();
  48. while(n!=0){
  49. if(n==1){
  50. write(1),puts("");
  51. n=read();
  52. continue;
  53. }
  54. ff=0;
  55. a[1]=1;
  56. book[1]=1;
  57. int i;
  58. for(i=2;i;i++){//枚举长度
  59. ff=0;
  60. memset(book,0,sizeof(book));//记录某个数是否搜索到过
  61. book[1]=1;//book[1]=1;
  62. dfs(2,i);
  63. if(ff)//退出
  64. break;
  65. }
  66. for(int j=1;j<=i;j++)
  67. write(a[j]),putchar(' ');
  68. puts("");
  69. n=read();
  70. }
  71. return 0;
  72. }

【POJ2248、LOJ#10021】 Addition Chains的更多相关文章

  1. 【NOI1999、LOJ#10019】生日蛋糕(搜索、最优化剪枝、可行性剪枝)

    主要是剪枝的问题,见代码,讲的很详细 #include<iostream> #include<cstdio> #include<cmath> #include< ...

  2. 1443:【例题4】Addition Chains

    1443:[例题4]Addition Chains 题解 注释在代码里 注意优化搜索顺序以及最优化剪枝 代码 #include<iostream> #include<cstdio&g ...

  3. 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】

    基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...

  4. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  5. 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】

    day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...

  6. Java连接Oracle数据库开发银行管理系统【二、设计篇】

    一.总体分析     此系统的实现并不难,但是如何更好的设计出实现方式还是需要更深入的分析,例如:如果再增加其他功能,是不是需要变动的 代码很少,只是直接再增加一点功能就可以了呢?如果使用的不是Ora ...

  7. JavaWeb【二、Tomcat安装】

    简版: 下载安装 http://tomcat.apache.org/download-80.cgi 环境变量 CATALINA_HOME-tomcat安装路径-[E:\apache-tomcat-8. ...

  8. Java学习笔记【十三、多线程编程】

    概念 Java 给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别的形式,但多线 ...

  9. redis如何实现高可用【主从复制、哨兵机制】

    实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...

随机推荐

  1. Java切换JDK版本的方法及技巧

    由于项目的不同安排,之前项目开发时,使用的jdk版本为1.8,现临时接手一以前项目,需要更换jdk版本. 安装 不再赘述,去Oracle网站(https://www.oracle.com/techne ...

  2. ubuntu14.04禁用USB外存储设备

    ubuntu 14.04中禁用usb外存储设备: 在网上找了很多方法,大概都是下面的命令,而实际测试的时候没有什么作用. gsettings set org.gnome.desktop.media-h ...

  3. 北京Linux运维培训怎么选?

    北京的地理优势和经济优势基本无需多言,作为全国机会最多的地方,吸引了无数的北漂前赴后继.作为中国互联网中心之一,北京有海量的运维岗位正在等待大家淘金.北京的Linux云计算培训业蓬勃发展. 云计算早已 ...

  4. EF-Linq

    一丶基本语法(from a in Table where a.id="001" select a).Tolist(); 隐式内连接from a in table1 join b i ...

  5. python利用7z批量解压rar

    一开始我使用了rarfile这个库,奈何对于含有密码的压缩包支持不好,在linux上不抛出异常:之后有又尝试了unrar..比rarfile还费劲.. 所以用了调用系统命令的方法,用7z来解压 通过a ...

  6. input chrome下输入之后背景变为黄色的解决办法

    之所以Input输入之后背景原因色变为可恶的黄色,是因为在chrome 下input加上了input:-webkit-autofill这个属性,里面写的就是这个问题出现的原因 代码就是:input:- ...

  7. Golang之路

    目录 Golang之路 Golang之路 Golang(一) - 开篇必须吹牛逼 Golang(二) - 第一个go程序和基本语法 Golang(三) - 函数 Golang(四) - 流程控制 Go ...

  8. 获取当前日期,或指定日期的农历js代码

    时间不早了,直接上代码啦-- var CalendarData=new Array(100);var madd=new Array(12);var tgString="甲乙丙丁戊己庚辛壬癸& ...

  9. Leetcode 41.缺失的第一个正数

    缺失的第一个正数 给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: ...

  10. Istio是啥?一文带你彻底了解!

    原标题:Istio是啥?一文带你彻底了解! " 如果你比较关注新兴技术的话,那么很可能在不同的地方听说过 Istio,并且知道它和 Service Mesh 有着牵扯. 这篇文章可以作为了解 ...