P4170

恰同学少年,凤华正茂;数风流人物,还看今朝。 / 2024-10-11 / 原文

区间dp。
转移方程见题解(doge)

#include<bits/stdc++.h>
using namespace std;
int m[310],dp[310][310],ans;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(NULL);
	cout.tie(NULL);
	string c;
	cin>>c;
	int n=c.size();
	for(int i=1;i<=n;i++)dp[i][i]=1;
	for(int s=1;s<n;s++){
		for(int l=1;l+s<=n;l++){
			dp[l][l+s]=114514;
			if(c[l-1]==c[l+s-1])dp[l][l+s]=min(dp[l+1][l+s],dp[l][l+s-1]);
			else for(int i=1;i<=s;i++)dp[l][l+s]=min(dp[l][l+s],dp[l][l+i-1]+dp[l+i][l+s]);
		}
	}
	cout<<dp[1][n];
}