区间DP BZOJ 1260

来源:互联网 发布:淘宝女装店铺改卖男装 编辑:程序博客网 时间:2024/05/29 07:43

BZOJ 1260 涂色
题目分析:可以看出这是一道区间DP,然后按照

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int f[100][100];char s[100];int main(){    int len=strlen(gets(s+1));    memset(f,0x3f,sizeof(f));    for(int i=1;i<=len;++i) f[i][i]=1;    for(int l=2;l<=len;l++)        for(int i=1;i+l-1<=len;i++){            int j=i+l-1;            if(s[i]==s[j]){                f[i][j]=min(f[i][j],f[i+1][j-1]+1);//这一次涂的颜色跟上一次的不一样,所以由上一次的+1                 f[i][j]=min(f[i+1][j],f[i][j-1]);//这一次要涂的颜色和左右两个跟新过来的是一样的,就不用加             }//上面两个都取最小值             else for(int k=i;k<j;k++) f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);//这里是区间DP的典型做法,小区间跟新大区间         }    printf("%d",f[1][len]);    return 0;}
原创粉丝点击