整理的演算法模板:acm演算法模板總結(分類詳細版)
有一款自走棋有26種操作,每種操作我們都用a,b,c,d,...,x,y,za,b,c,d,...,x,y,za,b,c,d,...,x,y,z的符號來代替.
比如對於abababababab,長度為222且本質不同的結果有ab,aa,ba,bbab,aa,ba,bbab,aa,ba,bb。
考慮到答案可能非常大,你只需要輸出在模1e9+71e9+71e9+7意義下的答案就可以了.
第一行兩個整數n,kn,kn,k.
第二行乙個長度為nnn的字串,保證只存在小寫字母.
示例1
3 1
abc
3
思路:dp
狀態屬性以及注意方程**中已經註明;關鍵是去重;
假設乙個字串組成為sa.....b(s為乙個串,a,b是字元);字元 a 可以和 s 中的任何序列構成新的序列,同理b也可以,如果a和b相同,那麼兩者和s構成的序列就相同,那麼就要減去乙個,就意味著前面的a不能和s構成新的序列;那麼就是減去
f(i-1,j-1) (i為a的位置下標)
// 狀態表示:集合:f(i,j)表示前i個字元中長度為j的不同的序列個數
// 屬性:sum;
// 狀態計算:f(i,j)=f(i-1,j)+f(i-1,j-1);
// 考慮去重 f(i,j)-=f(pre[s[i]]-1,j-1);
#include using namespace std;
const int mod=1e9+7;
typedef long long ll;
ll dp[1005][1005];
int pre[30];
char s[1005];
int main()
pre[s[i]-'a']=i;
} cout <<(dp[n][k]+mod)%mod<}
操作集錦 牛客網 牛客練習賽60
題目傳送 時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 輸入描述 第一行兩個整數n,k 第二行乙個長度為n的字串,保證只存在小寫字母.輸出描述 示例1輸入 3 1 abc輸出 3備註 1 n 1e3 ...
牛客練習賽60補題
思路 考慮位運算 的特性 只有兩者都為1才會對答案有貢獻 且 對答案貢獻的值為 1 k 其中k是當前1所在二進位制下的位數 所以考慮預處理每乙個位的1出現的次數 其中對每一位都會遍歷n n次 所以每一位對答案的貢獻就是 a i a i 1 i a i 為當前位置1的個數 include using ...
牛客練習賽9
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...