主要思路:dp[i][j]表示在前i個字元中刪除j個字元是字串種類數,則dp[i][j]分為兩種情況刪除第i個字元,不刪除第i個字元:dp[i - 1][j],刪除第i個字元:dp[i - 1][j - 1],所以dp[i][j
= dp[i - 1][j] + dp[i - 1][j - 1],然後再考慮重複情況,以樣例舉例ababcc刪除第1,2個元素ab和刪除第2,3個元素ba剩餘元素都為abcc,再舉乙個例子abcade,這時刪除abc和刪除bca剩餘元素都為ade,所以我們應該從k = i - 1個元素開始查詢s[k] == s[i]的元素,同時k>=1並且j >= (i - k),因為最多刪除j個元素,所以此時dp[i][j] = dp[i][j] - dp[k - 1][j - (i - k)]
ac**
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int n =
1000010
;long
long f[n][4
];char s[n]
;int
main
(void)}
}}long
long sum =0;
for(
int i =
0; i <=
3; i++
) sum +
= f[len]
[i];
cout << sum << endl;
return0;
}
至多刪三個字元
l3 020 至多刪三個字元 30 分 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc25刪掉 0 個字...
L3 020 至多刪三個字元 (30 分)
l3 020 至多刪三個字元 30 分 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc25 刪掉 0 個...
2018CCCC L3 2 至多刪三個字元(DP)
l3 2 至多刪三個字元 30 分 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc25 刪掉 0 個字元...