PKU 1159

PKU 1159


 

#include < stdio.h >
char  str[ 5001 ];
short   int  data[ 5005 ][ 5005 =   {0} ; // 这里用int 会超内存
int  main()
{
 
 
int len;
    
long max = 0,i ,j;

 scanf(
"%d%s",&len,str);
 
//len = strlen(str1);
 for(i = 0;i < len ;i++)
 
{
        
for(j = 0;j< len-i;j++)
  
{
   
if(i == 0)
    data[j][j
+1= 0;
   
else if(i == 1)
   
{
    
if(str[j] == str[j+1])
       data[j][j
+i] = 0;
    
else
     data[j][j
+i] = 1;
    
   }

   
else
   
{
    
if(str[j] == str[j+i])
     data[j][j
+i] = data[j+1][j+i-1];
    
else
     data[j][j
+i] = (data[j][j+i-1]<data[j+1][j+i]?data[j][j+i-1]:data[j+1][j+i]) + 1;
   }

  }

 }

           
 printf(
"%d",data[0][len-1]);
    
    
return 0;
}


 

简单的DP 从长度为一开始 到 len  一步一步过来 最后得到结果 既是

还有一个想法是用轮换数组

 

 

你可能感兴趣的:(PKU 1159)