題目鏈結
一道神仙題,有很多思考的方式,這裡選擇最好理解的一種來講
我們將序列分為兩種,一種開頭遞增,一種開頭遞減,顯然這兩種序列的數目是一樣的
現在我們只用考慮開頭遞增的情況
f[i][j]表示前i個數,最後乙個數字在前i個數的排名在1~j之間的方案數
顯然有f[i][j]=f[i][j-1],如果最後乙個數下降f[i][j]可以由f[i-1][i-j]轉移過來,
如果最後乙個數上公升,則可以由f[i-1][j-1]轉移過來,考慮到每一次轉移時沒有考慮之前一次的狀態最後是上公升還是下降的
我們都轉移過來會錯,由於波動序列具有對稱性且我們只考慮了開頭遞增的序列,所以我們只用從f[i-1][i-j]來轉移就ok了
還有,記得加上滾動陣列進行優化
# include# include# include
# include
# include
using
namespace
std;
const
int mn = 4205
;long
long f[2
][mn];
intn,p;
intmain()
int cnt=0
;
for(int i=2;i<=n;i++)
printf(
"%lld
",(f[cnt][n]*2)%p);
return0;
}
BZOJ1925 地精部落
題目描述 輸入格式 僅含一行,兩個正整數 n,p。輸出格式 僅含一行,乙個非負整數,表示你所求的答案對p取餘之後的結果。樣例樣例輸入 4 7樣例輸出 3資料範圍與提示 對於 20 的資料,滿足 n 10 對於 40 的資料,滿足 n 18 對於 70 的資料,滿足 n 550 對於 100 的資料,...
BZOJ 1925 地精部落 DP
description 僅含一行,兩個正整數 n,p。output 僅含一行,乙個非負整數,表示你所求的答案對p取餘 之後的結果。sample input 4 7 sample output 3 hint 對於 20 的資料,滿足 n 10 對於 40 的資料,滿足 n 18 對於 70 的資料,滿...
BZOJ 1925 地精部落 DP
其實不要小看一道地精部落,有比較大的思維量在裡面!我們首先知道 3 個性質 如果有想看證明的,請自動轉到 片下面,因為考慮有些人不想看證明 fi rst fir st 對於每乙個 數字 i 和 i 1 如果這兩個數不是相鄰的,那麼交換兩個數字的對應的方案數是一樣的!比如有 波動序列 32 415 3...