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

2021-09-12 01:12:54 字數 1026 閱讀 7683

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

給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 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個字元

則對第i個字元可刪可不刪 

刪除:dp[i][j+1] +=dp[i-1][j];     不刪除:dp[i][j]+=dp[i-1][j];

再考慮重複。sdabcad  刪除abc和bca結果相同,只要對 第 i 個字元,向前找到等於它的第k個字元,刪除重複的就行

dp[i] [j]-=dp[k-1][j-(i-k)]; 其中i-k表示間隔長度,由於最多刪除3個字元,影響長度最多為3

#include #define ll long long

#define len 1000005

using namespace std;

ll dp[len][4];

int main()

}} }

printf("%lld\n",dp[n][0]+dp[n][1]+dp[n][2]+dp[n][3]);

return 0;

}

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

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

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種,就是刪掉重複的字元其中乙個 如果不等,那麼考慮刪或者不刪...