zoukankan      html  css  js  c++  java
  • UVA11151

     1 /*
     2 题意: 选出多个字母组成回文,可以不连续,最长是多少。
     3 
     4 记忆化搜素.
     5 如果str[l]==str[r],dp[l][r]=dfs(l+1,r-1)+2, 
     6 否则  dp[l][r]=dfs(l+1,r), dfs(l,r-1));
     7 */ 
     8 
     9 #include<cstdio>
    10 #include<algorithm>
    11 #include<cstring>
    12 #define MAX 1010
    13 #define INF 0x3f3f3f3f
    14 using namespace std;
    15 char str[MAX];
    16 int dp[MAX][MAX];
    17 int dfs(int l,int r)
    18 {
    19     if(dp[l][r]!=INF) return dp[l][r];
    20     if(l==r ) return dp[l][r]=1;
    21     if(l>r) return 0;
    22     if(str[l]==str[r])     
    23         dp[l][r]=dfs(l+1,r-1)+2;    
    24     else    
    25         dp[l][r]=max(dfs(l+1,r),dfs(l,r-1));    
    26     return dp[l][r];
    27 }
    28 int main()
    29 {
    30     int t;
    31     scanf("%d",&t);
    32     getchar();
    33     while(t--)
    34     {
    35         gets(str);
    36         int l=strlen(str);
    37         memset(dp,INF,sizeof(dp));
    38         dfs(0,l-1);
    39         printf("%d
    ",dp[0][l-1]);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    jdbc代码
    openwrt vsftp
    openwrt 配置samba && ubuntu 配置samba
    如何学习开源项目
    Makefile 笔记
    Samba 学习笔记
    quilt-补丁工具
    to-do-list
    新增feeds模块
    linux命令
  • 原文地址:https://www.cnblogs.com/ember/p/4905802.html
Copyright © 2011-2022 走看看