思路:打表+dfs
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
int w[1001]={6,2,5,5,4,5,6,3,7,6};
int a[1001];
int b[5];
int n,ans;
int dfs(int step)
{
for (int i=0;i<=999;++i)
{
if (n-w[i]>=0){//當火柴棍尚未被取完
b[step]=i;
n-=w[i];
if (step==3)//如果已經搜索三層
{
if (b[1]+b[2]==b[3]&&n==0) ans++;//滿足條件則方案書加一
}else dfs(step+1);
n+=w[i];
}
}
}
int main ()
{
cin>>n;
n=n-4;
for (int i=10;i<=999;++i)//產生所有可能的拆分
{
w[i]=w[i/10]+w[i%10];
}
dfs(1);
cout<<ans;
return 0;
}