51nod 1196 字串的數量(DP 數論?)

2022-05-12 16:37:21 字數 752 閱讀 5978

這題好像是神題...v1 v2 v3分別涵蓋了51nod 5級演算法題 6級演算法題 難題

討論區的曹鵬神牛好強啊...一種做法切了v1 v2 v3,而且做法是一步一步優化的

還沒去看優化的部分,未優化已經能過v1了

設g(i)為結尾編號》n/2的長度為i的合法鏈的方案數,v(i)為長度為i的合法字串的方案數

v(x)=g(1)*v(x-1)+g(2)*v(x-2)+g(3)*v(x-3)+...+g(p)*v(x-p)

這個p顯然是logn級別的,遞推算一下就行了,時間複雜度o(mlogn),就可以過v1了

#include#include

#include

#include

#include

#define ll long long

using

namespace

std;

const

int maxn=1000010,mod=1e9+7

;int

n,m,k;

int sum[maxn],v[maxn],g[22],f[22

][maxn];

void read(int &k)

int mod(int x)

intmain()

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

printf(

"%d\n

",v[m]);

return0;

}

view code

51nod 1196 字串的數量

超級神題!有n種字元,若此種字元的編號 1 n i 2 n 則他後面可接任意字元。若不是,則他後面接的字元編號至少要是他的兩倍。問長度為m的字串的個數。這道題我只想出了 o n 2 的做法,於是叕只能求助題解。題解的做法和週六第二題有點像,但我並沒有分析出最長鏈的長度小於 log n 這個性質。知道...

51nod 1874 字串排序

定義乙個字串的無序度為所有位置後面的字母比該位置的字母小的總數之和。比如 daabec 這個字串的無序度是5,因為d後面有4個位置比它小 aabc e後面有1個比它小 c 其它位置後面沒有比自己小的。aacedgg 的無序度為1 e後面有乙個d比它小 zwqm 的無序度為6,每個位置後面所有的字母都...

51nod 1874 字串排序

1874 字串排序 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 定義乙個字串的無序度為所有位置後面的字母比該位置的字母小的總數之和。比如 daabec 這個字串的無序度是5,因為d後面有4個位置比它小 aabc e後面有1個比它小 c 其它位置後面沒有比自己小的...