題目鏈結
題意,給乙個字串,求子序列「cwbc」出現的次數
分析:dp,滾動陣列
令 f[i][j],(j = 1,2,3,4) 表示前 i 個字元中,匹配了字串」cwbc」 的前多少位,那麼有轉移方程:
f[i][1] = (f[i−1][1] + (s[i] ==′ c′)) % mod
f[i][2] = (f[i−1][2] + (s[i] ==′ w′)∗f[i−1][1]) % mod
f[i][3] = (f[i−1][3] + (s[i] ==′ b′)∗f[i−1][2]) % mod
f[i][4] = (f[i−1][4] + (s[i] ==′ c′)∗f[i−1][3]) % mod
記憶體超標。使用滾動陣列優化開銷:
f[1] = (f[1] + (s[i] ==′ c′)) % mod
f[2] = (f[2] + (s[i] ==′ w′)∗f[1]) % mod
f[3] = (f[3] + (s[i] ==′ b′)∗f[2]) % mod
f[4] = (f[4] + (s[i] ==′ c′)∗f[3]) % mod
**中動規的第二維正著來反著來都沒區別,因為互有關聯的21,32,43都是二者只可能有乙個執行的,而14雖然都有可能執行,但互不影響
1 #include 2using
namespace
std;
3const
int inf=1
<<30
;4 typedef long
long
ll;5
const
double pi=acos(-1);6
const
int mod=2000120420010122;7
const
int maxn=2e5+7
;8 ll dp[5];9
intmain()
20 cout<4]<22return0;
23 }
計算字串中子串出現的次數
2.計算字串中子串出現的次數利用輸入函式輸入任意兩個字串,請編寫程式求出第二個字串在第乙個字串 現的次數,即在第乙個字串中有幾個第二個字串。例1 輸入123sdk123dfg123121 123輸出 3 例2 輸入 1wdfw112sfrtes wq輸出 0 include include int ...
字串出現最大次數
時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 在美麗大興安嶺原始森林中存在數量繁多的物種,在勘察員帶來的各種動物資料中有未統計數量的原始動物的名單。科學家想判斷這片森林中哪種動物的數量最多,但是由於資料太過龐大,科學家終於忍受不了,想請聰明如你的acmer來幫忙。輸入 第一...
字串中子串問題
字串中子串的位置查詢 include include include 定義查詢函式原型 intsearchzc char str1,char substr int main intsearchzc char str1,char substr j 0 else i 當然也可以使用strstr 函式去尋...