记录编号 413025 评测结果 AAAAAAAAAA
题目名称 [SCOI 2007]压缩 最终得分 100
用户昵称 GravatarHallmeow 是否通过 通过
代码语言 C++ 运行时间 0.003 s
提交时间 2017-06-10 17:31:39 内存使用 0.35 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define pos(i,a,b) for(int i=(a);i<=(b);i++)
char a[100],b[100];
int n;
int f[100][100];
int check(int i,int j)
{
    pos(k,1,j-i-1)
    {
       if(a[i+k]!=a[j+k])
        return 0;
    }
    return 1;
}
int main()
{
    freopen("compress.in","r",stdin);
    freopen("compress.out","w",stdout);
    memset(f,50,sizeof(f));
    cin>>b;
    n=strlen(b);
    pos(i,1,n)
      a[i]=b[i-1];
    //cout<<n;
     
    pos(i,1,n)
      f[i][i]=2;
    f[1][1]=1;
    pos(i,1,n)
      pos(j,i+1,n)
      {
         f[i][j]=min(f[i][j-1]+1,f[i][j]);
         if(a[i]==a[j]&&check(i,j))
           f[i][j+j-i-1]=min(f[i][j+j-i-1],f[i][j-1]+1);
      }
    pos(i,1,n)
      pos(j,i+1,n)
        pos(k,i,j-1)
          f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]);
    cout<<f[1][n];
    //while(1);
    return 0;
}