P1092 虫食算
P1092 虫食算 DFS+剪枝 题意描述 有一个好好的算式突然被一只虫子给啃了,而且什么也没剩下, 然后我们莫名其妙的知道了哪些数是相同的,问各字母代表的数字, 数据保证有且仅有一组解,没了。 还看不懂的话,出门右手进 传送门 算法分析 如果你很忙,请跳过下面3行 题意描述的比较简单,但也不是不能理解(语文不好) 看一看数据范围,发现n≤26,然后大喊三声:“ 爆搜!!! ” 过了15分钟,你又喊道: “妈妈我TLE啦!!!” 初步分析 首先设计状态,搜索的 深度是确定的数的个数 ,当深度==n时表示 确定了所有数(但并不保证答案正确) 显然如果爆搜你会TLE(2626是一个很有趣的数让你TLE的数),所以我们 要考虑剪枝 , 同时, 搜索的顺序 也耐人寻味,难道是按照A,B,C······这样搜索吗? 还有, 检测答案的方法 又是什么? 综上,我们需要考虑三个问题: 怎么剪枝? 怎么钦定搜索顺序? 怎么检测答案? 深入探索 剪枝 算是重点吧。 第一,三个字符串长度都是n,很容易想到不能有进位 。 第二,首先我们看看这个 xx6xx + xx8xx --------- xx5xx 那么它是对是错? 如果按照常理,6+8=14!=5或15,这是错的 但如果上一位有进位,6+8+1=15,它又是合法的 所以有:如果某 \(i\) 位,满足 \((A[i]+B[i]\)