zoukankan      html  css  js  c++  java
  • UVA 11584 Partitioning by Palindromes 动态规划 入门

    这个题目的大意就是,给你一个字符串,然后让你求出最少的回文数。我开始傻逼了,写了一个o(n^3)的算法,结果老超时。然后略看了别人的题解,才知道有个如此的转移方程。

    f[i+1]=min(f[j]+1,其中j~i是回文),基础的动态规划题目,还得多多加强训练。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    #define MAXN 1010
    #define INF 1000000000
    char s[MAXN];
    int f[MAXN];
    bool isp(int l,int r)
    {
         bool ok=1;
         for(int k=0;k*2<=r-l;k++)
         {
    	     if(s[l+k]!=s[r-k])
    	     {
    		     ok=0;break;
    	     }
         }
         return ok;
    }
    int main()
    {
    	int cas;
    	scanf("%d",&cas);
    	while(cas--)
    	{
    		scanf("%s",s);
    		int n=strlen(s);
    		for(int i=0;i<n;i++)f[i]=INF;
    		f[0]=0;f[1]=1;
    		for(int i=1;i<n;i++)
    		{
    			f[i+1]=INF;
                        for(int j=i;j>=0;j--)
    		    {
    			   
    			    if(isp(j,i))f[i+1]=min(f[i+1],f[j]+1);
    		    }
    		}
    		//for(int i=0;i<n+1;i++)cout<<f[i]<<' ';
    		//cout<<endl;
    		printf("%d
    ",f[n]);
    	}
        
    }
    


     

  • 相关阅读:
    解决servlet在web.xml中的路径跳转问题
    浅谈上市公司期权
    spring 与mybatis 整合总结
    学习ssm心得
    django中ORM的事务操作
    Celery快速入门
    vagrant 使用指南
    数据库之mysql
    python之pip
    linux基础
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3366472.html
Copyright © 2011-2022 走看看