UVALive 8024 Stack Construction

#include <iostream>
#include <algorithm>
#include <stdio.h>
//debug心累- -
using namespace std;

int n;
char s[maxn];
int a[maxn][maxn];
int main(){
    scanf("%d\n",&n);

    while(n--){
        gets(s);
        int l=strlen(s);
        for(int i=0;i<l;i++)
        for(int j=0;j<l;j++)
            a[i][j]= i<=j? (j-i+1)*3:0;
        for(int i=l-1;i>=0;i--)
        for(int j=i;j<l;j++)
        for(int k=i;k<j;k++)
            {
                if(s[j]==s[k])a[i][j]=min(a[i][j],a[i][k]+a[k+1][j]-2);
                else a[i][j]=min(a[i][j],a[i][k]+a[k+1][j]);
            }

//        for(int i=0;i<l;i++)printf("%2c ",s[i]);printf("\n");
//
//        for(int i=0;i<l;i++)
//        {
//
//            for(int j=0;j<l;j++)printf("%2d ",a[i][j]);printf("\n");
//        }
        cout<<a[0][l-1]<<endl;
    }
    return 0;
}

 

posted @ 2017-09-22 16:05  MeowMeowMeow  阅读(190)  评论(0编辑  收藏  举报