NYOJY 491 幸運三角形

2022-04-05 15:35:57 字數 3201 閱讀 9564

描述

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

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

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

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

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

樣例輸入

3

4

樣例輸出

4

6

///

排列組合第一行,然後直接尋找是否相等

#include #include

#include

#define n 1010

#define mod 1000000007

using

namespace

std;

int n,m,ans[25

];int a[25];///

待排列的數儲存在此

bool vis[15

];int

p[n][n],k;

intsum,num,tot;

void dfs(int cnt)///

按字典序輸出n個數選m個數的所有排列

int c = 2

;

while(c

c++;

}if(sum ==num)

tot++;

k = 0;//

for(int i=0; i//

cout/

cout/

for(int i = 1; i < m; i++)

////

cout

;

return

; }

for(int i=0; i)

}int

main()

else

num /= 4

; fill(vis,vis+25,0

); a[

0] = 1

; a[

1] = 2

; dfs(0);

cout

}return0;

}

tle純粹dfs,回溯還未入門,不過如果應試的話完全可以打表,畢竟資料量不是太大。

///

排列組合第一行,然後直接尋找是否相等

#include #include

#include

#define n 1010

#define mod 1000000007

using

namespace

std;

int n,m,ans[25

];int a[25];///

待排列的數儲存在此

bool vis[15

];int

p[n][n],k;

intsum,num,tot;

void dfs(int cnt)///

按字典序輸出n個數選m個數的所有排列

int c = 2

;

while(c

c++;

}if(sum ==num)

tot++;

k = 0;//

for(int i=0; i//

cout/

cout/

for(int i = 1; i < m; i++)

////

cout

;

return

; }

for(int i=0; i)

}int

main()

else

num /= 4

; fill(vis,vis+25,0

); a[

0] = 1

; a[

1] = 2

; dfs(0);

cout

; }

return0;

}

打表過了

回溯才是正解,可以減掉重複計算的值,但是自己沒搞懂,留下正解先

///

邊回溯邊計算,避免重複計算

#include"

iostream

"#include

#include

#include

using

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);

}return0;

}

回溯正解

nyoj491幸運三角形

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

NYOJ491幸運三角形

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

NYOJ 491 幸運三角形

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