题目
给你n(n<=24)根火柴棍,你可以拼出多少个形如“A+B=C”的等式?
等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。
-
加号与等号各自需要两根火柴棍
-
如果A≠B,则A+B=C与B+A=C视为不同的等式(A,B,C>=0)
-
n根火柴棍必须全部用上
思路来源
https://www.luogu.org/problemnew/solution/P1149
题解
预处理火柴棒根数,搜的时候满足条件再向下搜
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5;
int n,a[]={6,2,5,5,4,5,6,3,7,6};
int cnt[N],s,ans;
void dfs(int x,int num)
{
if(x==1)
{
for(int i=0;i+s<N;++i)
if(cnt[i]+cnt[i+s]+4==num)ans++;
return;
}
else
{
for(int i=0;i<N;++i)
{
if(cnt[i]>num)continue;
s=i;
dfs(x+1,num-cnt[i]);
}
}
}
int main()
{
for(int i=0;i<N;++i)
{
if(i<10)cnt[i]=a[i];
else cnt[i]=cnt[i/10]+cnt[i%10];
}
scanf("%d",&n);
dfs(0,n);
printf("%d\n",ans);
return 0;
}