nyoj 491 幸运三角形 【DFS】+【打表】
2014-11-27 20:19
267 查看
幸运三角形
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述
话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况):
如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2).
输入有多组测试数据(少于20组)。
每行含一个整数n(0<n<20)。
输出输出相应的幸运三角形个数。
样例输入
3 4
样例输出
4 6
简单的DFS,不打表会超时的。。。
代码:
#include <cstdio> #include <iostream> #include <cstring> const int M = 25; using namespace std; int map[M][M]; int n, ans; int res[] = {0, 0, 0, 4, 6, 0, 0, 12, 40, 0, 0, 171, 410, 0, 0, 1896, 5160, 0, 0, 32757}; /*int judge(){ int i, q = n; int sum1 = 0, sum2 = 0; while(q){ if(map[q][1]) ++sum1; else ++sum2; for(i = 2; i <= q; i ++){ if(map[q][i]) ++sum1; else ++sum2; if(map[q][i]==map[q][i-1]) map[q-1][i-1] = 1; else map[q-1][i-1] = 0; } q--; } if(sum1 == sum2) return 1; else return 0; } void dfs(int cur){ if(cur > n){ if(judge()) ++ans; return ; } map [cur] = 1; dfs(cur+1); map [cur] = 0; dfs(cur+1); } void f(){ for(int i = 1; i < 20; i ++){ ans = 0; n = i; dfs(1); res[i] = ans; cout<<res[i]<<", "; } }*/ int main(){ // f(); int n; while(cin>>n){ cout<<res <<endl; } return 0; }
相关文章推荐
- NYOJ--491--dfs(打表水过)--幸运三角形
- NYOJ491 幸运三角形(暴力DFS+打表,水)
- NYOJ 491 幸运三角(dfs+打表)
- nyoj 491 幸运三角形 (dfs + 打表 出现木马 哈哈)
- nyoj--491--幸运三角形(dfs)
- nyoj--491--幸运三角形(dfs)
- NYOJ 491幸运三角形
- NYOJ 491 幸运三角形
- NYOJ-491(搜索)-题目-----------------------------幸运三角形
- NYOJ 491 幸运三角形(bitset)
- nyoj 491 幸运三角形
- nyoj题目491幸运的三角(深搜+打表)
- nyoj-491--幸运三角形--简单深搜枚举(TLE)
- NYOJ 491 幸运三角形
- nyoj 491 幸运三角形
- NYOJ-491 幸运三角形
- NYOJ491幸运三角形
- HDU 2510 符号三角形 NYOJ491 幸运三角形
- NYOJ-491 幸运三角形
- NYOJ 491 幸运三角形