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

2021-09-13 12:28:38 字數 911 閱讀 7199

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

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

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

ababcc
25

刪掉 0 個字元得到 "ababcc"。

刪掉 1 個字元得到 "babcc", "aabcc", "abbcc", "abacc" 和 "ababc"。

刪掉 2 個字元得到 "abcc", "bbcc", "bacc", "babc", "aacc", "aabc", "abbc", "abac" 和 "abab"。

刪掉 3 個字元得到 "abc", "bcc", "acc", "bbc", "bac", "bab", "aac", "aab", "abb" 和 "aba"。

題解:dp[i][j]代表前i位字元中刪除次數為j的結果有多少種,那麼就來dp常規操作了:外層迴圈字元位置依次遞增,內層迴圈刪除次數(進行操作,該位字元分刪不刪兩種情況,遞推關係式看**)。然後我們又想到這樣從前往後依次操作會有問題:比如字串abcbe,刪除bc和刪除cb得到的結果一樣,刪除abc和刪除acb的結果也一樣~。那麼我們就要想辦法去掉這些重複次數:

算了,我感覺我也說不清楚刪除的原理是什麼~~,等後來再來補上~~

#includeusing namespace std;

char s[1000010];

long long dp[1000010][4];//注意longlong和第二維度的維數,超過9就記憶體超限

int main()}}

}cout

}

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

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

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

問題描述 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入格式 輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,1e 6 內的字串。輸出格式 在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。解法 d i j 表示前i個字元,刪掉j...

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

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