【DFS】神祕數列
阿新 • • 發佈:2018-12-10
#include<cstdio>
int a[101][101];
int total=0,n,m;
void input()//讀入
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[n+1][i]);
}
void dfs(int dep)
{
if (dep==1)//如果只剩一個數
{
if (a[2][1]==m) total++;//方案數加一
return;//退出
}
for (int i=1;i<=dep-1 ;i++)
{
for (int j=1;j<=i-1;j++)
a[dep][j]=a[dep+1][j];//i之前的數列往前推
a[dep][i]=(a[dep+1][i]-a[dep+1][i+1]);//相減
for (int j=i+2;j<=dep+1;j++)
a[dep][j-1]=a[dep+1][j];//i之後的數列往前推
dfs(dep-1);
}
}
int main()
{
input();//讀入
dfs(n);//深搜
printf ("%d",total);//輸出方案數
return 0;
}