Question:
Result: 64
Solve:
DFS回溯,就一个一个去试能填几,然后就TLE了
两个问题:
第一:完全跑13个数去试,会炸,需要提前把不可能成立的方案去掉,比如填完第一行了,我就去看看第一个式子能否成立
第二:这个题的标答里除法是只算整除的,而不是“/”,然后就导致我看着我的1376发呆了半天,大无语事件
Code:
#include <bits/stdc++.h>
using namespace std;
bool a[14];
int num[13];
int res = 0;
void dfs(int deep)
{
//提前去除
if(deep > 3 && num[1] + num[2] != num[3])return ;
if(deep > 6 && num[4] - num[5] != num[6])return ;
if(deep > 9 && num[7] * num[8] != num[9])return ;
//终判
if(deep > 12)
{
if(num[10] / num[11] == num[12] && num[10]%num[11] == 0)
res++;
return ;
}
//搜索
for(int i = 1; i <= 13; i++){
if(a[i] == true) continue;
num[deep] = i; a[i] = true;
dfs(deep+1);
//回溯
a[i] = false;
}
}
int main(void)
{
memset(a,false,sizeof(a));
dfs(1);
cout <<res;
return 0;
}
声明:图片均来源于蓝桥杯官网,以个人刷题整理为目的,如若侵权,请联系删除~