題意:給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?
思路:果斷dp。設dp[i][j]為前i個字元刪掉j個字元的結果。從刪掉乙個字元開始想,如果當前字元和上乙個字元相等,那麼重複的情況只有1種,就是刪掉重複的字元其中乙個;如果不等,那麼考慮刪或者不刪這個字元,結果就等於i-1個字元刪與不刪的情況之和。刪掉兩個字元類似,如果當前字元和上乙個字元相等,比如abcdeff,重複的部分就是由(abcde)f構成,對於當前的f,如果不刪,那麼前面的那個f必須刪掉才能和當前的f刪掉的情況重複,所以用去乙個刪除的機會給前面的f,還剩乙個就給abcde了,所以重複的方案數就是dp[i-2][1]。如果當前字元和上上個字元相等,比如abcdefe,對於當前的e,如果不刪,那麼刪掉前面的f和e和刪掉當前的e和f情況重複,所以重複的情況只有一種。至於刪兩個字元的重複情況為什麼只有以上兩種,比如abcedfe,必須要刪掉dfe或edf也就是三個字元才能構成重複。刪掉三個字元的方法類似,只不過考慮的多一點,我這裡把栗子列在這裡,一樣的推一下就好了,abcdeff,abcdefe,abcedfe。
#includeusing namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int maxn=1e6+5;
const int mod=1e9+7;
const double eps=1e-8;
const double pi = acos(-1.0);
#define lowbit(x) (x&(-x))
ll dp[maxn][4];
int main()
else if(i>=3&&s[i-1]==s[i-3])
else
}// cout
return 0;
}
天梯賽L3 020 至多刪三個字元 (dp)
題目鏈結 題目 l3 020 至多刪三個字元 30 分 給定乙個全部由小寫英文本母組成的字串,允許你至多刪掉其中 3 個字元,結果可能有多少種不同的字串?輸入在一行中給出全部由小寫英文本母組成的 長度在區間 4,10 6 內的字串。在一行中輸出至多刪掉其中 3 個字元後不同字串的個數。ababcc2...
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 個字元...