首页 > 其他 > 详细

BZOJ1260

时间:2015-08-26 12:16:12      阅读:157      评论:0      收藏:0      [点我收藏+]

传送门:BZOJ1260

傻逼题。

f(i,j)[i,j]则转移是

f(i,j)={s[i]=s[j],minf(i+1,j),f(i,j?1)otherwise ,minf(i,k)+f(k+1,j),k[i,j?1]

然后就可以Dp辣!!!

代码上的小细节见下。

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

const int INF=0x3f3f3f3f;

char S[105];
int f[105][105];
bool used[105][105];

int Dp(int l,int r)
{
    if(used[l][r])
        return f[l][r];
    if(S[l]==S[r])
        f[l][r]=min(Dp(l+1,r),Dp(l,r-1));
    else{
        f[l][r]=INF;
        for(int k=l;k<r;k++)
            f[l][r]=min(f[l][r],Dp(l,k)+Dp(k+1,r));
    }
    used[l][r]=true;
    return f[l][r];
}

void Readdata()
{
    scanf("%s",S+1);
}

void First()
{
    int l=strlen(S+1);
    memset(used,false,sizeof(used));
    for(int i=1;i<=l;i++)
        f[i][i]=used[i][i]=1;
}

void Solve()
{
    printf("%d\n",Dp(1,strlen(S+1)));
}

void Close()
{
    fclose(stdin);
    fclose(stdout);
}

int main()
{
    Readdata();
    First();
    Solve();
    Close();
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

BZOJ1260

原文:http://blog.csdn.net/le_ballon_rouge/article/details/47999525

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!