fastle
垆边人似月 皓腕凝霜雪
/*
区间dp题目, 考虑当前区间l,r 是可以枚举最后一次拿的分界点来考虑最右边节点是不是具有贡献 


*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#define ll long long 
#define M 550
#define mmp make_pair
using namespace std;
int read()
{
	int nm = 0, f = 1;
	char c = getchar();
	for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;
	for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';
	return nm * f;
}
int f[M][M], n;
char s[M];
int main()
{
	n = read();
	scanf("%s", s + 1);
	memset(f, 0x3e, sizeof(f));
	for(int i = 1; i <= n; i++) f[i][i - 1] = 0, f[i][i] = 1;
	for(int len = 2; len <= n; len++)
	{
		for(int i = 1; i + len - 1 <= n; i++)
		{
			int j = i + len - 1;
			for(int k = i; k < j; k++)
			{
				if(s[k] == s[j]) f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j - 1]);
				else f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j - 1] + 1);
			}
		}
	}
	cout << f[1][n] << "\n";
	return 0;
}
posted on 2019-04-09 14:11  fastle  阅读(94)  评论(0编辑  收藏  举报