符号三角形

符号三角形问题

成绩10开启时间2018年03月8日 星期四 10:20
折扣0.8折扣时间2018年12月8日 星期六 15:00
允许迟交关闭时间2018年12月8日 星期六 15:00

输入:n (1<n<=23).

输出不同方案的个数.


测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 3↵
以文本方式显示
  1. 4↵
1秒64M0

#include<iostream>
#include<algorithm>
using namespace std;
int n;

int triangle[24][24];
int half;
int counts;
int ans;
void dfs(int ceng)
{
	if (counts > half || (ceng*(ceng - 1) / 2 - counts) > half) return;
	//if (counts > half) return;
	if (ceng > n)
	{
		if (counts==half)
		ans++;
		return;
	}
	for (int i = 0; i <= 1; i++)
	{
		triangle[1][ceng] = i; counts += i;
		for (int j = 2; j <= ceng; j++)
		{
			triangle[j][ceng - j + 1] = triangle[j-1][ceng-j+1] ^ triangle[j-1][ceng-j+2];
			counts += triangle[j][ceng - j + 1];
		}
		dfs(ceng + 1);
		for (int j = 2; j <= ceng; j++) counts -= triangle[j][ceng-j+1];
		counts -= i;
	}
}

int main()
{
	cin >> n;
	if ((n*(n + 1) / 2) % 2 == 1){ cout << 0 << endl; return 0; }
	half = (n + 1)*n / 4;
	dfs(1);
	cout << ans<<endl;
	return 0;
}

阅读更多

扫码向博主提问

好雨天堂

非学,无以致疑;非问,无以广识
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭