【POJ2248、LOJ#10021】 Addition Chains
事先预警:由于我太蒻了,本做法只能在POJ、LOJ等小数据(N<=100)平台上通过,在UVa(洛谷)上大数据并不能通过
戳我获得更好的观看效果
本题不用看,爆搜就是了,但是纯爆搜显然会爆时间,所以要加上一些剪枝
我们来看一下一些常用的剪枝(什么剪枝,其实这么多枝砍掉了,树都没了)
1.最优化剪枝:不存在的,本题求输出方案
2.优化搜索顺序:由于是SPJ,我们对于每个位置上的数字倒着枚举,容易搜索到答案
3.可行性剪枝:需用到数学方法,但是我不会,由于不加该剪枝也能过,所以不讲
最重要的: 卡常
剩下的思路见代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
inline int read(){
char chr = getchar(); int f = 1,ans = 0;
while(!isdigit(chr)) {if(chr == '-') f = -1;chr = getchar();}
while(isdigit(chr)) {ans = (ans << 3) + (ans << 1);ans += chr - '0';chr = getchar();}
return ans* f ;
}
void write(int x){
if(x < 0) putchar('-'),x = -x;
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
int n,m;
int ff=0;
int a[50];
int book[500];
void dfs(int x,int m){//当前找到第n个数
if(x==m+1){
if(a[x-1]==n)//由于每个位置我们都用尽量大的数,第一次搜索到的就是答案
ff=1;//标记答案找到了
return;//返回
}
for(int i=n;i>=a[x-1]+1;i--){//枚举第x个位置的数值
if(ff) return;
int fff=0;
for(int j=1;j<=x-1;j++){//判断能否由前面的数字构成
if(i-a[j]>=1 && book[i-a[j]]){
fff=1;
break;
}
}
if(fff){
book[i]=1;
a[x]=i;
dfs(x+1,m);//往下搜
book[i]=0;//回溯
if(ff) return;
}
}
}
int main(){
n=read();
while(n!=0){
if(n==1){
write(1),puts("");
n=read();
continue;
}
ff=0;
a[1]=1;
book[1]=1;
int i;
for(i=2;i;i++){//枚举长度
ff=0;
memset(book,0,sizeof(book));//记录某个数是否搜索到过
book[1]=1;//book[1]=1;
dfs(2,i);
if(ff)//退出
break;
}
for(int j=1;j<=i;j++)
write(a[j]),putchar(' ');
puts("");
n=read();
}
return 0;
}
【POJ2248、LOJ#10021】 Addition Chains的更多相关文章
- 【NOI1999、LOJ#10019】生日蛋糕(搜索、最优化剪枝、可行性剪枝)
主要是剪枝的问题,见代码,讲的很详细 #include<iostream> #include<cstdio> #include<cmath> #include< ...
- 1443:【例题4】Addition Chains
1443:[例题4]Addition Chains 题解 注释在代码里 注意优化搜索顺序以及最优化剪枝 代码 #include<iostream> #include<cstdio&g ...
- 基于SpringMVC下的Rest服务框架搭建【1、集成Swagger】
基于SpringMVC下的Rest服务框架搭建[1.集成Swagger] 1.需求背景 SpringMVC本身就可以开发出基于rest风格的服务,通过简单的配置,即可快速开发出一个可供客户端调用的re ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- Java连接Oracle数据库开发银行管理系统【二、设计篇】
一.总体分析 此系统的实现并不难,但是如何更好的设计出实现方式还是需要更深入的分析,例如:如果再增加其他功能,是不是需要变动的 代码很少,只是直接再增加一点功能就可以了呢?如果使用的不是Ora ...
- JavaWeb【二、Tomcat安装】
简版: 下载安装 http://tomcat.apache.org/download-80.cgi 环境变量 CATALINA_HOME-tomcat安装路径-[E:\apache-tomcat-8. ...
- Java学习笔记【十三、多线程编程】
概念 Java 给多线程编程提供了内置的支持.一个多线程程序包含两个或多个能并发运行的部分.程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径. 多线程是多任务的一种特别的形式,但多线 ...
- redis如何实现高可用【主从复制、哨兵机制】
实现redis高可用机制的一些方法: 保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实 ...
随机推荐
- PHP 之phpqrcode类库生成二维码
<?php /** * Created by PhpStorm. * User: 25754 * Date: 2019/6/4 * Time: 15:53 */ include "./ ...
- java静态变量、实例变量和局部变
实例变量又称成员变量: 1⃣️成员变量定义在类中,在整个类中都可以被访问 2⃣️成员变量随着对象的建立而建立,随对象的消失而消失,存在于对象所在的对内存中 3⃣️成员变量有默认初始值 局部变量: 1⃣ ...
- Ansible 利用playbook批量部署Nginx
我这里直接部署的,环境已经搭建好,如果不知道的小伙伴可以看上一遍ansible搭建,都写好了,这里是根据前面环境部署的 192.168.30.21 ansible 192.168.30.25 ...
- Charles 下载-破解-安装-配置
我当前使用版本为V4.2.7 最新版本下载地址 Charles 在线破解工具 下载完之后,先进行安装,安装完之后,根据破解链接中的步骤来就ok了. 比较费劲配置在下面,不过跟着一步步来就一定能好的 点 ...
- HDU 5446 Unknown Treasure
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- MVC.Net:通过Global.asax捕捉错误
在MVC.Net中,如果我们想做一个统一的错误处理的模块,有几个选择,一种是通过一个Base Controller来实现,另外一种就是在Global.asax中实现.这里介绍后一种方法. 首先打开Gl ...
- ustc 1117
无根树同构 有两种方法,一种是确定其中一棵树,另一棵树枚举根节点. 一种是,利用拓扑排序,先确定其中一棵树.另一棵树,若拓扑后剩两个节点,则枚举这两个节点为根结点,否则,只需做一次.注意,无根树节点入 ...
- 【HDU 4870】Rating【DP】
题意:一个人注冊两个账号,初始rating都是0,他每次拿低分的那个号去打比赛,赢了加50分,输了扣100分.胜率为p,他会打到直到一个号有1000分为止,问比赛场次的期望. 题解:因为每次添加分数或 ...
- gitserver提交代码的总结
将更新的代码提交到gitserver上所须要的步骤: 1.git pull 更新代码到最新 2,git add 文件名称 加入要提交的文件 3,git commit -m "关于改动的内 ...
- 使用memcachedclientXmemcached与Spring整合
1 简单介绍 Xmemcached是一个高性能的基于java nio的memcachedclient.在经过三个RC版本号后.正式公布1.10-final版本号. xmemcached特性一览: 1. ...