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

2021-09-11 19:21:43 字數 1035 閱讀 6342

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