bzoj1925 Sdoi2010 地精部落

2021-07-27 17:20:17 字數 658 閱讀 3987

題目大意:求全排列中鋸齒狀排列的個數。

首先進行打表暴力,會發現第乙個元素作為山峰和第乙個元素作為山谷,這兩種方案數是相等的,因此我們只需求出第乙個元素是山谷的方案數再乘2就是答案。

做法一:

f[i]表示i的全排列,第乙個元素時山谷時,鋸齒狀排列的方案數。那麼考慮在i-1的乙個鋸齒狀排列中插入i這個數,明顯地i只能作為山峰,稍微一畫就能發現i只能夠插入到前面有奇數個數的位置,那就列舉i的前面有多少數,j=1,3,5...,再用c(i-1,j)乘上f[j]*f[i-1-j],累加起來就等於f[i],組合數可以直接用楊輝三角來求。

做法二:

我就是智力低,我就是看不懂,只好當結論記住了。

狀態:f[i][j],轉移f[i][j]=f[i][j-1]+f[i-1][i-j],初始:f[1][1]=1。答案f[n][n]。

//動態規劃 

#include #include #define ll long long

#define maxn 5000

using namespace std;

ll n, p, f[maxn], g[maxn], c[2][maxn];

int main()

bzoj1925 Sdoi2010 地精部落

傳送門 我們設f i j 表示前i個數,第i個數排名是j的方案總數。我們可以強制第1個數是山峰。然後我們可以將整個序列高度取反,得到其他的方案數。然後我們發現這樣做的時間複雜度是o n 3 的 加上字首和優化就是o n 2 了 var f array 0.1,0.5005 of longint n,...

bzoj1925 Sdoi2010 地精部落

傳說很久以前,大地上居住著一種神秘的生物 地精。地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為n的山脈h可分為從左到右的n段,每段有乙個獨一無二的高度hi,其中hi是1到n之間的正整數。如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是乙個山峰。位於邊緣的山脈只有一段相鄰的山脈,其他都有兩段 即...

bzoj1925 SDOI2010 地精部落

問1到n的排列中有多少個是 抖動 的.即 滿足所有奇數字置的數字都比相鄰兩個數字小或者都比相鄰兩個數字大.定義f i j 表示長度為i,第乙個元素為j,且第乙個元素大於第二個元素的所有排列中,抖動排列 的數目.g i j 表示長度為i,第乙個元素為j,且第乙個元素小於第二個元素的所有排列中,抖動排列...