幸運三角形

2021-06-19 16:04:25 字數 1670 閱讀 7665

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:3 描述

話說有這麼乙個圖形,只有兩種符號組成(『+』或者『-』),圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外(第一層為所有可能情況),每層形狀都由上層決定,相鄰的符號相同,則下層的符號為『+』,反之,為『-』;如下圖所示(n = 3 時的兩種情況):

如果圖中的兩種符號個數相同,那這個三角形就是幸運三角形,如上圖中的圖(2).

輸入

有多組測試資料(少於20組)。

每行含乙個整數n(0輸出

輸出相應的幸運三角形個數。

樣例輸入

3

4

樣例輸出

4

6

這個題目有點坑。。。  我用dfs做超時。。。 然後很多人都是打表過的,從網上找了一段可以過得**。。。。

這是大神的**:

#include"iostream"

#include#include#includeusing namespace std;

typedef unsigned char uchar;

//char cc[2]=; //便於輸出

int n, //第一行符號總數

half, //全部符號總數一半

counter; //1計數,即 '-' 號計數

char **p; //符號儲存空間

long sum; //符合條件的三角形計數

//t,第一行第 t個符號

void backtrace(int t)

if( (counter <= half) && ( t*(t+1)/2 - counter <= half) )//若符號統計未超過半數,並且另一種符號也未超過半數

backtrace(t+1); //在第一行增加下乙個符號

//回溯,判斷另一種符號情況

for(j=2; j<=t; ++j)

counter -= p[j][t-j+1];

counter -= i;}}

}int main()

backtrace(1);

}

printf("%d\n", sum);

}return 0;

}

下面是我的**。。。超時。。。

#include #include #include #include using namespace std;

int m, count, map[20][20], sum,a = 0;

int judge();

void dfs(int cur);

int main()

map[0][cur] = 1;

a++;

dfs(cur + 1);

map[0][cur] = 0;

a--;

dfs(cur + 1);

}

幸運三角形

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時的...

幸運三角形

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時...

NYOJ 幸運三角形

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述話說有這麼乙個圖形,只有兩種符號組成 或者 圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外 第一層為所有可能情況 每層形狀都由上層決定,相鄰的符號相同,則下層的符號為 反之,為 如下圖所示 n 3 時的...