描述
話說有這麼乙個圖形,只有兩種符號組成(『+』或者『-』),圖形的最上層有n個符號,往下個數依次減一,形成倒置的金字塔形狀,除第一層外(第一層為所有可能情況),每層形狀都由上層決定,相鄰的符號相同,則下層的符號為『+』,反之,為『-』;如下圖所示(n = 3 時的兩種情況):
如果圖中的兩種符號個數相同,那這個三角形就是幸運三角形,如上圖中的圖(2).
輸入有多組測試資料(少於20組)。
每行含乙個整數n(0輸出
輸出相應的幸運三角形個數。
樣例輸入
3樣例輸出4
46
///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 #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 時...