您的位置:首页 > 其它

UVA 11584 DP水题

2013-09-20 18:29 225 查看
刘汝佳胖胖的那本白书钦点的DP水题

因为数据量比较小,所以我才敢用最渣的方法来做

DP公式为: DP[i] = min(DP[i], DP[j] + 1)后面的DP[j] + 1为j + 1到i的子串为回文串的情况

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char st[1100];
int n; int DP[1100];
bool ispa(int, int);
int main()
{
while(scanf("%d", &n) != EOF)
{
scanf("%s", st + 1);
int len = strlen(st + 1); DP[1] = 1; DP[0] = 0;
for(int i = 2; i <= len; i++)
{
DP[i] = DP[i - 1] + 1;
for(int j = 1; j < i; j++)
{
if(DP[i] == 1) break;
if(ispa(j, i)) DP[i] = min(DP[i], DP[j - 1] + 1);
}
}
printf("%d\n", DP[len]);
}
}
bool ispa(int l, int r)
{
for(int i = l; i <= (l + r + 1) / 2; i++)
if(st[i] != st[r + l - i]) return false;
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: