l3-020 至多刪三個字元 (30 分)
給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?
輸入在一行中給出全部由小寫英文本母組成的、長度在區間 [4, 106] 內的字串。
在一行中輸出至多刪掉其中 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種,就是刪掉重複的字元其中乙個 如果不等,那麼考慮刪或者不刪...