最近感觉遇到dfs时根本没什么递归搜索之类的想法,就想找点题做,从简单开始循序渐进,然后就看到这个简单题,做了下发现不是普通的简单题,看了别的网站发现是NOIP提高组的题,所以做完后就来总结一下。
剪枝:因为加法进位只有0或者1,所以如果前面进位不确定,则判断进位为0或者进位为1时a+b是否等于c即可,当最高位时,如果进位为0时都超出n则输出false;如果前面进位确定,则加上进位判断即可,最高位同理。
注意:给bi赋值时,一定要注意是同时给一列赋值,所以第一重循环是循环列,而不是行,在这里debug了许久。
//虫食算
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
int n, w;
char ai[10][30];
int bi[110], path[110];//bi表示从最低位开始每一列字母分别代表的值, path是bi代表的数字
bool st[110];
bool check(){
for(int i = n - 1, t = 0; i >= 0; i --){
int a = ai[1][i] - 'A', b = ai[2][i] - 'A', c = ai[3][i] - &#