求迴文子序列個數(雖然字串,但是DP)

涤生yang發表於2024-04-17

因為馬拉車不能求迴文子序列個數,所以只能採用這個DP

#include <iostream>
using namespace std;
int dp[200][200];
 
string str;
 
int solve(){
	int l=str.length();
    for(int j=0;j<l;++j){
        dp[j][j]=1;
        for(int i=j-1;i>=0;--i){
        	if(str[i]==str[j]) dp[i][j]=dp[i+1][j]+dp[i][j-1]+1;
            else dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1];
        }
    }
    return dp[0][l-1];
}
 
int main(){
    while(cin>>str){
        cout<<solve()<<endl;
    }
    return 0;
}

相關文章