L3 020 至多刪三個字元 30分 (dp)

2021-10-25 07:30:59 字數 984 閱讀 7209

問題描述:

給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?

輸入格式:

輸入在一行中給出全部由小寫英文本母組成的、長度在區間 [4, 1e​6] 內的字串。

輸出格式:

在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。

解法:

d[i]

[j]表示前i個字元,刪掉j個字元的方案數,

轉移方程:d[i]

[j]=d[i-1]

[j]+d[i-1]

[j-1],

(對應刪和不刪)

但是這樣會重複計算,例如

caba,刪除ab和刪除ba得到的串是一樣的,

記pre[s[i]

]為s[i]上一次出現的位置,

設x=pre[s[i]

]那麼d[i]

[j]-

=d[x-1]

[j-(i-x)],

為什麼這樣減?

因為重複匹配的部分是d[x-1]

[j-(i-x)

],需要減掉一次.

code:
#include

using

namespace std;

#define int long long

const

int maxm=

1e6+5;

char s[maxm]

;int d[maxm][4

];int pre[26]

;int n;

signed

main()

} pre[s[i]

-'a'

]=i;

}int ans=0;

for(

int i=

0;i<=

3;i++

) cout

}

L3 020 至多刪三個字元 (30 分)

l3 020 至多刪三個字元 30 分 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc25 刪掉 0 個...

L3 020 至多刪三個字元 (30 分 dp

給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc25 刪掉 0 個字元得到 ababcc 刪掉 1 個字元...

PTA天梯L3 020 至多刪三個字元(dp)

題意 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?思路 果斷dp。設dp i j 為前i個字元刪掉j個字元的結果。從刪掉乙個字元開始想,如果當前字元和上乙個字元相等,那麼重複的情況只有1種,就是刪掉重複的字元其中乙個 如果不等,那麼考慮刪或者不刪...