良心AC(可直接复制)

许诺  •  11天前


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

int main() {
	int N;
	string s;
	cin >> N >> s;

	vector<vector<int>> dp(N, vector<int>(N, 0));

	for (int i = 0; i < N; ++i) {
    		dp[i][i] = 1;
	}

	for (int len = 2; len <= N; ++len) {
    		for (int i = 0; i <= N - len; ++i) {
        		int j = i + len - 1;
        		if (s[i] == s[j]) {
            			dp[i][j] = dp[i+1][j-1] + 2;
        		} else {
            			dp[i][j] = max(dp[i+1][j], dp[i][j-1]);
        		}
    		}
	}

	int lps_length = dp[0][N-1];
	int min_insertions = N - lps_length;

	cout << min_insertions << endl;

	return 0;
}

评论:

请先登录,才能进行评论