nyoj 491 幸运三角形 【DFS】+【打表】

幸运三角形

时间限制: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[n][cur] = 1;
    dfs(cur+1);
    map[n][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[n]<<endl;
    }
    return 0;
}
时间: 2024-12-28 16:53:56

nyoj 491 幸运三角形 【DFS】+【打表】的相关文章

nyoj 491 幸运三角形 (dfs + 打表 出现木马 哈哈)

题目491 题目信息 运行结果 本题排行 讨论区 幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成('+'或者'-'),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为'+',反之,为'-';如下图所示(n = 3 时的两种情况): 如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2). 输入

NYOJ491幸运三角形

幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为‘+’,反之,为‘-’;如下图所示(n = 3 时的两种情况): 如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2). 输入 有多组测试数据(少于20组).每行含一个整数n(0

HDU 2510 符号三角形 NYOJ491 幸运三角形

符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 860    Accepted Submission(s): 437 Problem Description 符号三角形的 第1行有n个由"+"和"-"组成的符号 ,以后每行符号比上行少1个,2个同号下面是"+",2个异 号下面

NYOJ 587 blockhouses 【DFS】

blockhouses 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a small castle th

NYOJ 722 数独 【DFS】+【预处理】

数独 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 数独是一种运用纸.笔进行演算的逻辑游戏.玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个3*3宫内的数字均含1-9,不重复. 每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的. 有一天hrdv碰到了一道号称是世界上最难的数独的题目,作为一名合格的程序员,哪能随随便便向困难低头,于是他决定编个程序来解决它.. 输入 第一行有一个

搜索---幸运三角形

//一. #include<iostream> #include<cstring> using namespace std; int main(){ int n,ans[22]; memset(ans,0,sizeof(ans));// ans[3]=4;ans[4]=6;ans[7]=12;ans[8]=40;ans[11]=171;ans[12]=410;  ans[15] = 1896;ans[16]=5160;ans[19]=32757;ans[20]=59984; whi

HDU 2563 统计问题 (DFS + 打表)

统计问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6506    Accepted Submission(s): 3836 Problem Description 在一无限大的二维平面中,我们做例如以下如果: 1.  每次仅仅能移动一格: 2.  不能向后走(如果你的目的地是"向上",那么你能够向左走,能够向右走,也能

NYOJ 659 判断三角形

判断三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 小明非常喜欢研究三角形.现在,小明已经知道三角形的三条边,如果三条边能组成三角形,小明就会很高兴,他就会得到一个"YE",如果他经过进一步的研究知道它又是等腰三角形, 他又会得一个"YE",他再次研究出它又是一个等边三角形,当然,他又会得到一个"YE". 小明当然不想自己判断了!那请你帮他写一个程序计算出给你三条边小明会得到几个"YE"?

NYOJ-491 幸运三角形

幸运三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成('+'或者'-'),图形的最上层有n个符号,往下个数依次减一,形成倒置的金字塔形状,除第一层外(第一层为所有可能情况),每层形状都由上层决定,相邻的符号相同,则下层的符号为'+',反之,为'-';如下图所示(n = 3 时的两种情况): 如果图中的两种符号个数相同,那这个三角形就是幸运三角形,如上图中的图(2). 输入 有多组测试数据(少于20组). 每行含一个整数n(