Addition Chains
题目描述:
一个与 n 有关的整数加成序列 < a0 , a1 , a2 ...am> 满足一下四个条件:
1.a0=1
2.am=n
3.a0<a1<a2<...<am
4.对于每个( 1≤k≤m )都存在有两个整数 i 和 j (0 ≤ i , j ≤ k - 1 , i 和 j可以相等),使得ak=ai+aj
你的任务是:给定一个整数 n ,找出符合上述四个条件的长度最小的整数加成序列。如果有多个满足要求的答案,只需要输出任意一个解即可。
举个例子:序列< 1,2,3,5 >和< 1,2,4,5 >均为 n = 5 时的解
输入格式:
多组数据,每行给定一个正整数n。输入以0结束。
输出格式:
对于每组数据,输出满足条件的长度最小的数列。
样例输入:
5
7
12
15
77
0
样例输出:
1 2 4 5
1 2 4 6 7
1 2 4 8 12
1 2 4 5 10 15
1 2 4 8 9 17 34 68 77
思路:
看了书之后才知道这题是用搜索。(蒟蒻的我只会暴力枚举)
那么怎么搜索又成为了一个问题——其实可以依次搜索一位k, 枚举之前的i, j, 把a[i] + a[j] 加到a[k]的位置上, 然后接着搜索;
这样还是AC不了。
这时就需要考虑剪枝。
对于剪枝:
①尽量从达到小枚举i,j让序列的数尽快逼近n;(贪心思想)
②为了不重复搜索,用一个bool数组存a[i] + a[j] 是否已经被搜过;
AC代码:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<stack>
#include<queue>
#include<deque>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define maxn 1100
int n,ans,a[maxn];
bool use[maxn];
inline int read()
{
char kr=;
char ls;
for(;ls>''||ls<'';kr=ls,ls=getchar());
int xs=;
for(;ls>=''&&ls<='';ls=getchar())
{
xs=xs*+ls-;
}
if(kr=='-') xs=-xs;
return xs;
}
inline bool dfs(int stp)
{
memset(use,,sizeof(use));
if(stp>ans)
{
if(a[ans]==n) return true;
else return false;
}
for(register int i=stp-;i>=;i--)
{
for(register int j=i;j>=;j--)
{
if(a[i]+a[j]>n) continue;
if(!use[a[i]+a[j]])
{
if(a[i]+a[j]<=a[stp-]) return false;
use[a[i]+a[j]]=true;
a[stp]=a[i]+a[j];
if(dfs(stp+)) return true;
a[stp]=;
use[a[i]+a[j]]=false;
}
}
}
}
int main()
{
while(n=read(),n!=EOF)
{
if(n==) return ;
if(n==)
{
printf("1\n");
continue;
}
if(n==)
{
printf("1 2\n");
continue;
}//特判一下上述三种情况
a[]=;a[]=;
for(ans=;!dfs();ans++);//搜索记录
for(register int i=;i<=ans;i++)
{
printf("%d ",a[i]);
}
printf("\n");
memset(a,,sizeof(a));
}
return ;
}
洛谷谜一般的评测TLE,在POJ上提交AC了。
Addition Chains的更多相关文章
- UVA 529 Addition Chains(迭代搜索)
Addition Chains An addition chain for n is an integer sequence with the following four propertie ...
- [POJ2248] Addition Chains 迭代加深搜索
Addition Chains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5454 Accepted: 2923 ...
- 1443:【例题4】Addition Chains
1443:[例题4]Addition Chains 题解 注释在代码里 注意优化搜索顺序以及最优化剪枝 代码 #include<iostream> #include<cstdio&g ...
- poj 2248 Addition Chains (迭代加深搜索)
[题目描述] An addition chain for n is an integer sequence with the following four properties: a0 = 1 am ...
- 「一本通 1.3 例 4」Addition Chains
Addition Chains 题面 对于一个数列 \(a_1,a_2 \dots a_{m-1},a_m\) 且 \(a_1<a_2 \dots a_{m-1}<a_m\). 数列中的一 ...
- UVA 529 - Addition Chains,迭代加深搜索+剪枝
Description An addition chain for n is an integer sequence with the following four properties: a0 = ...
- [POJ 2248]Addition Chains
Description An addition chain for n is an integer sequence with the following four properties: a0 = ...
- Addition Chains POJ - 2248 (bfs / dfs / 迭代加深)
An addition chain for n is an integer sequence <a0, a1,a2,...,am=""> with the follow ...
- C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains
此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...
- POJ 2245 Addition Chains(算竞进阶习题)
迭代加深dfs 每次控制序列的长度,依次加深搜索 有几个剪枝: 优化搜索顺序,从大往下枚举i, j这样能够让序列中的数尽快逼近n 对于不同i,j和可能是相等的,在枚举的时候用过的数肯定不会再被填上所以 ...
随机推荐
- linux 二级域名设置
首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com 其次,在 httpd.conf 中打开 mod_rewrite 之后,在 httpd.conf 的最后,添加以下内容: Rewr ...
- TestNG 搭建测试框架 自动化测试
框架层级及基本组件: 参考:https://www.cnblogs.com/jier888/p/8998724.html Java作为开发语言 Maven管理项目及Jar包 Testng作为测试 ...
- jquery 页面分页的实现
<!DOCTYPE html> <html> <head> <title>分页</title> <link rel="s ...
- 利用webpack手动构建vue工程
一 创建一个文件夹,在文件夹中打开命令行执行:$npm install 创建一个package文件 ,可以先忽略作者等信息: 二 安装webpack依赖包(根据需要安装) //全局安装 ...
- Python小项目四:实现简单的web服务器
https://blog.csdn.net/u010103202/article/details/74002538 本博客是整理在学习实验楼的课程过程中记录下的笔记形成的,参考:https://www ...
- AngularJs 开发遇到的问题,以及解决方案
1>ng-if 导致 ng-model 失效的问题 比如说下拉联动隐藏显示的时候,多个验证模块,需要使用到ng-if.可以使用 $parent 来解决这个问题 ng-model="$p ...
- glibc 2.x release note
glibc 2.x release note,参见: https://sourceware.org/glibc/wiki/Glibc%20Timeline https://www.gnu.org/so ...
- DevExpress GridControl使用方法总结2
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...
- 第五章 CSS常用属性笔记
1. span标签 突显,强调局部文字的作用. 2.字体样式 font-size: 字体大小 font-style:normal,italic(倾斜) font-weight:normal,bold( ...
- Android图片裁剪解决方案 -- 从相册截图
在看Storage Access Framework,里面有一个加载相册图片的程序片断,可能是系统版本的问题,无法返回结果,这里找到一个适用于旧版本的方法. 在Android开发中,可以轻松调用一个I ...