您的位置:首页 > 大数据 > 人工智能

bzoj1260[CQOI2007]涂色paint

2016-10-09 20:52 369 查看
思路:区间dp,用f[i][j]表示区间[i,j]的答案,然后转移即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

char s[100];
int f[100][100];

int main(){
scanf("%s",s+1);int n=strlen(s+1);
for (int i=1;i<=n;i++) f[i][i]=1;
for (int len=2;len<=n;len++){
for (int l=1;l<n;l++){
int r=l+len-1;if (r>n) break;
f[l][r]=min(f[l][r-1]+!(s[r]==s[r-1]),f[l+1][r]+!(s[l]==s[l+1]));
if (s[l]==s[r]) f[l][r]=min(f[l][r],min(f[l+1][r],f[l][r-1]));
if (l+1<=r-1)
if (s[l]==s[r]) f[l][r]=min(f[l+1][r-1]+1,f[l][r]);
if (s[l]!=s[r]) for (int k=l; k<r; k++) f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]);
}
}
printf("%d\n",f[1]
);
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: