sdut 4401 遞減序列 dp

2021-09-11 17:25:09 字數 976 閱讀 8594

現在給你n個不同的數,a1,a2,a3, ..... ,an。求長度為k的不同遞減序列的個數,既包含連續也包含不連續的序列。

例如:給你n=3,k=2,原始序列為 3 ,1,2 。長度為2的遞減序列為3,1和 3,2;

一共有兩組所以答案為2.

第一行輸入n,k(1<=n<=20000, 2=第二行輸入n個整數ai。(0<=ai<=1e5).

輸出乙個整數為長度為k 的不同的遞減數列的個數。答案取餘1000000000;

5 3

5 4 3 2 1

10
dp[i][j] 表示最後一位在第i位長度為j的遞減序列的長度;

所以dp方程為: if(arr[now]最後累加ans[1...n][k] 即可;

時間複雜度在4e9;過了蠻不可思議的;

#include#define int long long

using namespace std;

const int maxn=2e4+10;

const int mod=1000000000;

int dp[maxn][15];

int arr[maxn];

#undef int

int main()}}

int ans=0;

/*for(int i=1;i<=n;i++)

cout<}*/

for(int i=1;i<=n;i++)

ans=(ans+dp[i][kk])%mod;

printf("%lld\n",ans);

return 0;

}

字串擴充套件 SDUT 1916

tom有些時候為了記錄的方便,常常將一些連續的字元用擴充套件符 簡單表示。比如abcdefg可以簡寫為a g,即用起始的字元和終止字元中間加上乙個擴充套件符 來表示這個字串。但是為了處理的方便,tom又必須將這些我們簡單記法擴充套件成原來的字串。很明顯要是人工來做的話必定很麻煩,tom知道計算機可以...

hdu5256序列變換(非遞減子串行)

題意 中文直接粘吧 序列變換 problem description 我們有乙個數列a1,a2.an,你現在要求修改數量最少的元素,使得這個數列嚴格遞增。其中無論是修改前還是修改後,每個元素都必須是整數。請輸出最少需要修改多少個元素。input 第一行輸入乙個t 1 t 10 表示有多少組資料 每一...

SDUT1524回文串判定(棧)

time limit 1000ms memory limit 65536k 有疑問?點這裡 輸入一串字元 長度小於100 判斷該串字元是否是回文串 正序讀與逆序讀內容相同 輸入一串字元 長度小於100 若該串字元是回文串輸出 yes 否則輸出 no asdfgfdsa yes include inc...