【USACO2.3.3】和为零 爆搜

直接穷举所有情况,但是要注意字典序。 这种题应该一次对…… 


但是我错了2次


一次是,最后一个数字我给算成两位数的十位了……

一次是字典序问题……


大家要注意好这2个问题就可以了……





#include <iostream>
#include <cstdio>
using namespace std;

int n;
char a[15];

void dfs(int deep, int flag, int fuhao, int tot)
{
	if (deep > n )
	{
		if (tot != 0)	return;
		if (flag)	return;
		cout<<1;
		for (int i = 2; i <= n; ++ i)
			cout<<a[i]<<i;
		cout<<endl;
	}
	if (flag == 1)
	{
		a[deep] = ' ';
		dfs(deep + 1, 0, fuhao, tot + deep * fuhao);
		return;
	}
	a[deep] = '+';
	dfs(deep + 1, 1, 1, tot + deep * 10);
	dfs(deep + 1, 0, 1, tot + deep);
	a[deep] = '-';
	dfs(deep + 1, 1, -1, tot - deep * 10);
	dfs(deep + 1, 0, -1, tot - deep);

}

int main()
{
	cin >> n;
	dfs(2,1,1,10);
	dfs(2,0,0,1);
	return 0;
}


你可能感兴趣的:(【USACO2.3.3】和为零 爆搜)