题目来自“2018-2019 ICPC, NEERC, Southern Subregional Contest”,codeforces上放置了此题:Find a Number

题意:给出两个正整数d,s。找到一个最小的数 n 使得 n%d==0,并且所有的 n 所有位的数字相加和为s。

解题思路:常规想法,BFS搜索,从根节点0开始搜索,逐渐往尾部添加元素,显然会超时。

优化:减少搜索的次数,减枝。BFS的搜索策略已经保证了第一个访问到的且满足条件的数 n 一定是最小值。因此更关心如何减枝,我们定义一个二维布尔类型数组 vis[d][s],其中 vis[i][j] 表示一个数 x、x%d==i、x的所有位上的数字和为 j 是否被找到了。如果找到了,说明我们不需要继续搜索。

比如 d = 4,s=11,假如我们搜索到36的时候令 vis[0][9]=1 (因为实际上搜索到56就找到答案了), 后面再搜到某个数 x 满足和36一样的条件余数为0,和为9的数字我们都不会加入队列继续搜索,因为 x 的子空间有数满足最终要求,那么 36 的子树也一定包含答案,因为在这个题目里面36和 x 已经没有任何区别,它们的子树除了实际的数值不同外,余数以及每位上的和都相同。并且根据BFS的顺序,36的子树上的答案一定比 x 的子树上的答案小(仔细想想是不是这样~),它通过记录当前的状况是否访问过,从而判断是否要继续搜索

比如下图。

python代码

#此代码直接放到cf上会超时,这应该是用python的原因导致的,改成C++应该就好了。
#
vis = [[0]*5050 for i in range(505)]
q = [] #(int(n)%d, number_sum, n:str)
d,s = 0,0
q.append((0,0,''))
vis[0][0]=1
z = input()
a = z.split(' ')
d = int(a[0])
s = int(a[1])
def bfs():
cs = [str(i) for i in range(10)]
while q:
now = q[0]
q.pop(0)
for i,j in enumerate(cs):
nxt_mod = (now[0]*10+i)%d
nxt_sum = now[1]+i
nxt_n = now[2]+j
if nxt_mod==0 and nxt_sum==s:
return nxt_n
if not vis[nxt_mod][nxt_sum] and nxt_sum<=s:
q.append((nxt_mod,nxt_sum,nxt_n))
vis[nxt_mod][nxt_sum]=1
return -1 print(bfs())

Find a Number (记忆化+BFS)的更多相关文章

  1. Labyrinth(记忆化BFS)

    Labyrinth http://codeforces.com/problemset/problem/1064/D time limit per test 2 seconds memory limit ...

  2. HDU 1072(记忆化BFS)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1072 题目大意:走迷宫.走到装置点重置时间,到达任一点时的时间不能为0,可以走重复路,求出迷宫最短时 ...

  3. HDU 2364 (记忆化BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2364 题目大意:走迷宫.从某个方向进入某点,优先走左或是右.如果左右都走不通,再考虑向前.绝对不能往 ...

  4. HDU 2579 (记忆化BFS搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:走迷宫.对于障碍点,只有当前(dep+1)%k才能走,问最少时间. 解题思路: 只有 ...

  5. HDU 2653 (记忆化BFS搜索+优先队列)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2653 题目大意:迷宫中有普通点和陷阱.其中普通点可以走可以飞,但是陷阱只能飞.走耗时1,飞耗时2.但 ...

  6. HDU 4166 & BNU 32715 Robot Navigation (记忆化bfs)

    题意:给一个二维地图,每个点为障碍或者空地,有一个机器人有三种操作:1.向前走:2.左转90度:3.右转90度.现给定起点和终点,问到达终点最短路的条数. 思路:一般的题目只是求最短路的长度,但本题还 ...

  7. HDU 1429 (BFS+记忆化状压搜索)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1429 题目大意:最短时间内出迷宫,可以走回头路,迷宫内有不同的门,对应不同的钥匙. 解题思路: 要是 ...

  8. FZU 2092 bfs+记忆化搜索

    晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分 ...

  9. FZU 2092 收集水晶 bfs+记忆化搜索 or 暴力

    题目链接:收集水晶 一眼看过去,觉得是普通的bfs,初始位置有两个.仔细想了想...好像如果这样的话..........[不知道怎么说...T_T] dp[12][12][12][12][210] 中 ...

  10. HDU 1428 漫步校园(记忆化搜索,BFS, DFS)

    漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...

随机推荐

  1. GrapeCity Documents V6.0 Update 2发布,新增支持SpreadJS的.sjs文件格式

    近日,GrapeCity Documents 正式迎来其V6.2 的发布更新,能够支持 SpreadJS 中 .sjs 类型的文件.这一重大更新将为用户带来更多地惊喜. .sjs文件有两个关键优势:空 ...

  2. MySQL InnoDB 是怎么使用 B+ 树存数据的?

    这里限定 MySQL InnoDB 存储引擎来进行阐述,避免不必要的阅读歧义. 首先通过一篇文章简要了解下 B 树的相关知识:你好,我是B树 . B+ 树是在 B 树基础上的变种,主要区别包括: 1. ...

  3. 关闭Google"阻止了登录尝试"方法, 其他设备也能登录Gmail等谷歌服务

    首先登录谷歌账户,  访问 https://www.google.com/settings/security/lesssecureapps 把"不够安全的应用的访问权限" 启用打勾 ...

  4. Chrome 手机端网页如何使用开发者模式

    chrome 手机端网页如何调试 在Chrome手机端,你可以使用Chrome开发者工具来调试网页.下面是一些步骤: 首先,确保你的手机已经开启开发者模式.打开USB调试功能或可以通过USB连接或无线 ...

  5. Solution -「洛谷 P5176」公约数

    Description Link. 求 \[\sum_{i=1}^n\sum_{j=1}^m\sum_{k=1}^p\gcd(i\cdot j,i\cdot k,j\cdot k)\times \gc ...

  6. Python并发编程——操作系统发展史、多道技术、进程理论、开启进程、join方法、进程间的数据隔离

    文章目录 必备知识回顾 今日内容详细 操作系统发展史 多道技术 必备知识点 多道技术图解 多道技术重点知识 进程理论 必备知识点 进程调度 进程运行的三状态图 两对重要概念 开启进程的两种方式 joi ...

  7. Kubeflow基础知识

    kubeflow 基础知识 kubeflow 简介 kubeflow是谷歌开源的MLOps开源平台,其中包含的不同组件代表了机器学习生命周期的不同阶段. 下图是kubeflow组织ML工作流程: ku ...

  8. CCF PTA编程培训师资认证

    考试费用: 双会员500元,任意一方单会员750元,报名考试同时成为CCF专业会员850元,非会员1000元. P/T2补考费用:双会员200元,任意一方单会员300元,非会员400元. T1补考费用 ...

  9. Welcome to the Android Open Source Project!

    Android is an open-source software stack for a wide range of mobile devices and a corresponding open ...

  10. oracle命令2 和一致性关闭、非一致性关闭

    启动SQL*Plus语法sqlplus [username/password][@server] [as sysdba|sysoper] ,其中username/password如果不输人,SQL*P ...