對於乙個1->n的排列 ,定義a中的乙個位置i是好的,當且僅當ai-1>ai 或者ai+1>ai。對於乙個排列a,假如有不少於k個位置是好的,那麼稱a是乙個好的排列。
現在有q個詢問,每個詢問給定n,k,問有多少排列是好的。答案對10^9+7取模。
顯然是計數類dp,我們設f[i][j]表示對於乙個1->i的排列,好的位置有j個的情況
考慮轉移,顯然f[i][j]->f[i+1][k]相當於插入乙個i+1
那麼我們考慮對j的影響,顯然f[i][j]只能轉移到f[i+1][j]或者f[i][j],因為這取決於你將i+1放在哪個位置上
如果放在乙個不是好位置的兩邊,那麼j就會+1,否則j不變,而且顯然,不好的位置一定不連續(顯然)
那麼轉移就十分簡單了,參考code
#include
#include
#include
#define m 1000000007
#define l long long
using
namespace
std;
void ad(int& x,l y)
int f[3010][3010]=,s[3010][3010]=,n;
int main()
} for(int i=1;i<=3000;++i)
for(int j=i-1;~j;--j)
scanf("%d",&n);
for(int x,y,i=0;iscanf("%d%d",&x,&y);
printf("%d\n",s[x][y]);
}}
Jzoj4209 已經沒有什麼好害怕的了
小y 最近開始學習演算法姿勢,但是因為小r 非常bb,給了她很多b6 題,所以她覺得自己已經沒有什麼前途了。於是小r 給了她一些稍微簡單的題,讓她覺得已經沒有什麼好害怕的了,其中一道是這樣的 給定乙個長度為n 只包含左括號和右括號的序列,現在小r 想要知道經過每乙個位置的合法子串有多少個。空串是乙個...
Jzoj4209 已經沒有什麼好害怕的了
小y 最近開始學習演算法姿勢,但是因為小r 非常bb,給了她很多b6 題,所以她覺得自己已經沒有什麼前途了。於是小r 給了她一些稍微簡單的題,讓她覺得已經沒有什麼好害怕的了,其中一道是這樣的 給定乙個長度為n 只包含左括號和右括號的序列,現在小r 想要知道經過每乙個位置的合法子串有多少個。空串是乙個...
JZOJ 7 9C組第三題 排列的編碼
給出乙個長度為n序列,求出它在n的全排列中是第幾個。這道題要找規律,設ml i ml i 為第i i 位後面有幾個數比第 i role presentation style position relative i i位小,通過一系列操作 詳見某蒟佬 可以得到答案an s an s ml i n i ...