传送门

题目分析

一道 dfs,迭代加深

我们可以很快的猜出来最终 \(m\) 的长度必然是小于 \(10\) 的。

而这种浅深度的问题正好适用于迭代加深。

之后考虑剪枝

优化搜索顺序 : 我们要让序列中的数字迅速地逼近 \(n\),自然是要 \(i\) 和 \(j\) 从大到小枚举,且 \(j<=i\)、

排除等效冗余 : 我们发现,对于不同的 \(i\) 和 \(j\) ,他们的 \(a[i]+a[j]\) 有一定的可能性会相同

所以避免重复搜索,我们需要进行判重.

好了,到这里你就可以轻松切掉《算法竞赛进阶指南》那个题了///

AcWing 170

但是在 UVA 中,\(n\) 的数据范围可是 \(1e5\) 啊!

所以还有一个剪枝,

最优化剪枝 :后面每一项最多是前一项的 \(2\) 倍

代码实现

#include <bits/stdc++.h>

#define rint register int
#define endl '\n' using namespace std; const int N = 1e4 + 5; int n, path[N]; bool dfs(int u, int k)
// u is the depth of now
// k is the depth of MAX
{
if (path[u - 1] > n)
{
return false;
} if (u == k)
{
return path[u - 1] == n;
} if (path[u - 1] * ((long long)1 << (k - u)) < n)//最优化剪枝
{
return false;
} bool st[N] = {0};//通过 bool数组排除等效冗余 for (rint i = u - 1; i >= 0; i--)
{
for (rint j = i; j >= 0; j--)//搜索顺序
{
int s = path[i] + path[j];
if (s > n || s <= path[u - 1] || st[s])
{
continue;
} st[s] = true; path[u] = s; if (dfs(u + 1, k))
{
return true;
}
}
} return false;
} signed main()
{ path[0] = 1; while (cin >> n and n != 0)
{
int depth = 1; while (!dfs(1, depth))// 不断扩大范围
{
depth++;
} for (rint i = 0; i < depth - 1; i++)
{
cout << path[i] << " ";
} cout << path[depth - 1];//UVA 输出不能有多余空格 puts("");
} return 0;
}

UVA529 加成序列的更多相关文章

  1. POJ2248-Addition Chains

    满足如下条件的序列被称为加成序列: X[1]=1,X[m]=n,X[1]<X[2]<......<X[m-1]<X[n] 对于每个k(2<=k<=m)都存在两个整数 ...

  2. Addition Chains

    题目描述: 一个与 n 有关的整数加成序列 < a0 , a1 , a2 ...am> 满足一下四个条件: 1.a0=1 2.am=n 3.a0<a1<a2<...< ...

  3. 【夯实PHP基础】UML序列图总结

    原文地址 序列图主要用于展示对象之间交互的顺序. 序列图将交互关系表示为一个二维图.纵向是时间轴,时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色 ...

  4. Windows10-UWP中设备序列显示不同XAML的三种方式[3]

    阅读目录: 概述 DeviceFamily-Type文件夹 DeviceFamily-Type扩展 InitializeComponent重载 结论 概述 Windows10-UWP(Universa ...

  5. 软件工程里的UML序列图的概念和总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 软件工程的一般开发过程:愿景分析.业务建模,需求分析,健壮性设计,关键设计,最终设计,实现…… 时序图也叫序列图(交互图),属于软件 ...

  6. python序列,字典备忘

    初识python备忘: 序列:列表,字符串,元组len(d),d[id],del d[id],data in d函数:cmp(x,y),len(seq),list(seq)根据字符串创建列表,max( ...

  7. BZOJ 1251: 序列终结者 [splay]

    1251: 序列终结者 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 3778  Solved: 1583[Submit][Status][Discu ...

  8. 最长不下降序列nlogn算法

    显然n方算法在比赛中是没有什么用的(不会这么容易就过的),所以nlogn的算法尤为重要. 分析: 开2个数组,一个a记原数,f[k]表示长度为f的不下降子序列末尾元素的最小值,tot表示当前已知的最长 ...

  9. [LeetCode] Sequence Reconstruction 序列重建

    Check whether the original sequence org can be uniquely reconstructed from the sequences in seqs. Th ...

  10. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

随机推荐

  1. 使用$test$plusargs提高RTL验收速度

    0 前言 这段时间在整合一个小ip,因为要验证每个feature是否可行,需要用testbench + C语言的方式进行仿真验证,由于每种feature不仅要在C语言中修改寄存器配置,还要再testb ...

  2. 基于md5加密的模拟管理员登录系统

    import os import pandas as pd def md5(string:str=''):     import hashlib     md5 = hashlib.md5()     ...

  3. 微信小程序预览时显示有图片未上传

    最近在做小程序项目,在项目里面加了几个图片.在预览调试时出现弹窗显示"文件未上传",但是在左侧的模拟器上却是能正常显示的. 解决思路: 图片在本地和模拟器上显示正常,表示图片本身没 ...

  4. DASCTF 2023 & 0X401七月暑期挑战赛

    比赛只出了一道,小菜不是罪过-_- controlflow 这个题动调到底就行 for i in range(40): after_xor[i]=inp[i]^0x401 after_xor[i] + ...

  5. CentOS7.9中的Glibc2.17源码编译升级到Glibc2.31

    一.准备工作 1.配置yum阿里镜像源 查看yum当前配置的仓库,如果yum配置的不是阿里云源,请配置阿里云源. yum repolist all 验证是否能ping通阿里云 # 如果不能ping通可 ...

  6. 通过商品API接口获取到数据后的分析和应用

    一.如果你想要分析商品API接口获取到的数据,可以按照如下的步骤进行: 了解API接口返回值的格式,如JSON格式.XML格式.CSV格式等,选择适合你的数据分析方式. 使用API请求工具(如Post ...

  7. 代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II

      491.递增子序列 卡哥建议:本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里.  https://programmercarl.com/0491.%E9%80%92%E5% ...

  8. Paddle图神经网络训练-PGLBox代码阅读笔记

    图存储部分 paddle/fluid/framework/fleet/heter_ps graph_gpu_wrapper.h GPU图主入口 graph_gpu_ps_table.h GPU图的主要 ...

  9. Elasticsearch之常用术语

    一. 数据库和ES简单类比 关系型数据库 表(Table) 行(Row) 列(Cloumn) Schema SQL Elasticsearch 索引(Index) 文档(Document) 字段(Fi ...

  10. Gradle 设置全局镜像源

    复制 init.gradle.kts 文件到 Windows 的 %USERPROFILE%/.gradle 或者 Linux 的 ~/.gradle 目录下.也可以直接复制文末的代码为 init.g ...