其實不要小看一道地精部落,有比較大的思維量在裡面!
我們首先知道 3 個性質:
如果有想看證明的,請自動轉到**片下面,因為考慮有些人不想看證明
fi其實就是變成了 dprst fir
st
:對於每乙個 數字 i 和 i+1 , 如果這兩個數不是相鄰的,那麼交換兩個數字的對應的方案數是一樣的!
比如有 波動序列 32
415 324
15
和 1243512
435se
condse
cond
:我們由 1~n 的波動數列的任意一種,將每乙個 aiai
都可以用(n+1) 減去,那麼得到的新的序列其實還是合法的,而且相對的山谷和山峰會改變!
比如有 波動序列
32415
32415
和 34251
34251
thir
d thi
rd
:波動數列具有對稱性……
[i][
j]= dp[
i][j
]=
dp[i−1
][j]
+ dp[
i−1]
[j]+
dp[i−1
][i+
1−j]dp
[i−1
][i+
1−j]
dp[i][
j]d p[
i][j
]表示可以 用 當前離散化之後的1~i 號的以
j j
為開頭的山峰的方案個數
我們可以思考一下:
一. 我們假設有
j' role="presentation" style="position: relative;">jj與
j+1 j+1
並不相鄰—>那麼我們就是方案數為 dp
[i−1
][j]
d p[
i−1]
[j
]為什麼?
因為dp二. 如果j[i][
j−1]dp
[i][
j−1]
表示的是 將j放入第乙個的方案數,而且 j−
1 j−1
就是山峰,那麼我們就知道了
j j
肯定不是第二個,那麼這樣j−
1' role="presentation" style="position: relative;">j−1
j−1就不是山峰了!
j
與 j−
1' role="presentation" style="position: relative;">j−1
j−1是相鄰的,那麼此時的方案數就是 dp[i+1-j]
因為我們可以考慮就是
j j
,j−1' role="presentation" style="position: relative;">j−1
j−1,
????
... ???
?...
那麼就是相當於轉換成了
1 1
~i−1' role="presentation" style="position: relative;">i−1
i−1的數字 j−
1 j−1
為山谷的情況了! 因為
j>j−
1 j
>j−
1那麼j-1 的右邊只能是 比j−
1 j−1
要大的數字,也就是它是山谷的時候了!
那麼我們根據性質二可以知道就是等同於 給你 [1
,j−1
]u[j
+1,i
] [1,
j−1]
u[j+
1,i]
的數,讓你求以 j−
1 j−1
為開頭的山谷的方案數.那麼其實又可以發現[j
+1,i
] [j+
1,i]
的數 其實也就是相當於 [j
,i−1
] [j,
i−1]
,可以自行思考一發!
那麼就是求 1~i-1 以 j−
1 j−1
為開頭的山谷的方案數. 也就是同時 用 i−
1+1 i−1
+1
減去之後的方案數,即dp[i-1][i-1+1-(j-1)] = dp[i-1][i+1-j]的方案數.!
用了滾動陣列!
#pragma gcc optimize(2)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 4201
#define n 1000050
#define inf 0x3f3f3f3f
#define p pair
#define ll long long
using
namespace
std;
int n,mod,dp[2][maxn];
inline ll read()
while(c>='0'&&c<='9')
return flag?-x:x;
}int main(int argc,char
const* argv)
first:fi
rst:
比如有j ….. j+1
那麼他們左右的數字要麼是比 j-1 要小 要麼是比 j+1要大,那麼我們列一列情況會發現沒有什麼不合法的情況se
cond
: sec
ond:
意會一下… th
ird:th
ird:
意會一下…
BZOJ 1925 地精部落 DP
description 僅含一行,兩個正整數 n,p。output 僅含一行,乙個非負整數,表示你所求的答案對p取餘 之後的結果。sample input 4 7 sample output 3 hint 對於 20 的資料,滿足 n 10 對於 40 的資料,滿足 n 18 對於 70 的資料,滿...
BZOJ1925 地精部落
題目描述 輸入格式 僅含一行,兩個正整數 n,p。輸出格式 僅含一行,乙個非負整數,表示你所求的答案對p取餘之後的結果。樣例樣例輸入 4 7樣例輸出 3資料範圍與提示 對於 20 的資料,滿足 n 10 對於 40 的資料,滿足 n 18 對於 70 的資料,滿足 n 550 對於 100 的資料,...
BZOJ 1925地精部落題解
題目鏈結 一道神仙題,有很多思考的方式,這裡選擇最好理解的一種來講 我們將序列分為兩種,一種開頭遞增,一種開頭遞減,顯然這兩種序列的數目是一樣的 現在我們只用考慮開頭遞增的情況 f i j 表示前i個數,最後乙個數字在前i個數的排名在1 j之間的方案數 顯然有f i j f i j 1 如果最後乙個...