1. 程式人生 > >UVA 11584 Partitioning by Palindromes 動態規劃 入門

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\n",f[n]);
	}
    
}