【题解】洛谷P1435 回文子串(区间dp)

IOI 2000的题目 实际上是一道区间dp

我们设dp[i][j]代表字符串中第i个字符到第j个字符得到回文串需要添加的字符数,初始化dp[i][i]为0。这里注意还应该初始化dp[i][i+1],如果s[i]==s[i+1]那么dp[i][i+1]=0,否则=1。接着我们枚举不相邻的两个点,如果两个字符相同那么dp[i][j]就等价于dp[i+1][j-1]。否则就等于这一段去掉首字符在尾加上1与去掉尾字符在头加上1的最小值,状态转移更新即可。

#include
#include
#include
#include
#include
using namespace std;
string s;
int dp[1010][1010];
int main()
{
	cin>>s;
	int len=s.size();
//	memset(dp,0x3f3f3f3f,sizeof(dp));
	for(int i=0;i

 

你可能感兴趣的:(题解,动态规划,题解,洛谷,动态规划,区间dp)