虫食算(dfs + 剪枝)

最近感觉遇到dfs时根本没什么递归搜索之类的想法,就想找点题做,从简单开始循序渐进,然后就看到这个简单题,做了下发现不是普通的简单题,看了别的网站发现是NOIP提高组的题,所以做完后就来总结一下。  

 

传送门:184. 虫食算 - AcWing题库 

剪枝:因为加法进位只有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] - &#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值