P1012火柴棍等式

思路:打表+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;	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章