• hdu 4628 动态规划


    思路:首先就是状态压缩,然后判断哪些状态是回文串。最后就是动态方程:dp[i]=min(dp[i],dp[j]+1)。这个方程得前提条件是状态(j-i)为回文串。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define inf 1<<30
    using namespace std;
    int pl[1<<20],dp[1<<20],n,l;
    char str[20];
    int ispl(int x)
    {
        char s[20];
        int cnt=0,i;
        for(i=0;i<=l;i++)
        {
            if(x&(1<<i))
                s[cnt++]=str[i];
        }
        s[cnt]='';
        int len=strlen(s);
        for(i=0;i<len;i++)
        {
            if(s[i]!=s[len-i-1])
                return 0;
        }
        return 1;
    }
    void init()
    {
        memset(pl,0,sizeof(pl));
        memset(dp,0,sizeof(dp));
    }
    int main()
    {
        int t,i,j;
        scanf("%d",&t);
        while(t--)
        {
            init();
            scanf("%s",&str);
            l=strlen(str);
            n=1<<l;
            n-=1;
            for(i=1;i<=n;i++)
            {
                if(ispl(i)) pl[i]=1;
            }
            dp[n]=0;
            for(i=n-1;i>=0;i--)
            {
                dp[i]=inf;
                for(j=i+1;j<=n;j=((j+1)|i))
                {
                    if(pl[j-i])
                        dp[i]=min(dp[i],dp[j]+1);
                }
            }
            printf("%d
    ",dp[0]);
        }
        return 0;
    }
  • 相关阅读:
    nextLine() 、nextInt()的跳过问题
    Spring事务管理
    常见web错误码
    connect()函数
    int main(int argc,char*argv[])
    cin.getline函数
    TCP数据报结构以及三次握手(图解)
    TCP报文首部
    strtol函数
    MySQL简介
  • 原文地址:https://www.cnblogs.com/wangfang20/p/3228381.html
Copyright © 2020-2023  润新知