• hdu4632 Palindrome subsequence 区间DP


    hdu4632 多校4场题目 区间dp
    定义变量 f[i][j],表示 在区间 i到j的回文串的个数(注:i,j为字符串下标)
    则 对于区间i- j 如果s[i]==s[j] f[i][j]=f[i+1][j]+f[i][j-1]-f[i+1][j-1]+f[i +1][j-1]+1=f[i+1][j]+f[i][j+1]+1;
    如果 s[i]!=s[j] 那么 f[i][j]=f[i+1][j]+f[i][j-1]-f[i+1][j-1];
    代码如下:

     1 #include<iostream>
     2 #include<cstdlib>
     3 #include<cstdio>
     4 #include<cstring>
     5 #include<string>
     6 using namespace std;
     7 #define MAX 1010
     8 #define M 10007
     9 int f[MAX][MAX];
    10 void init()
    11 {
    12     memset(f,0,sizeof(f));
    13     for(int i=0;i<MAX;i++)
    14         f[i][i]=1;
    15 }
    16 int main()
    17 {
    18     string s;
    19     int t;
    20     cin>>t;
    21     int k=1;
    22     while(t--)
    23     {
    24         cin>>s;
    25         int n=s.length()-1;
    26         init();
    27         for(int j=0;j<=n;j++)
    28             for(int i=j-1;i>=0;i--)
    29             {
    30                 if(s[i]==s[j]) f[i][j]=(f[i+1][j]+f[i][j-1]+1)%M;
    31                 else 
    32                 if(s[i]!=s[j]) f[i][j]=(f[i][j-1]+f[i+1][j]-f[i+1][j-1]+M)%M;
    33             }
    34         cout<<"Case "<<k++<<": "<<f[0][n]<<endl;
    35     }
    36     return 0;
    37 }
    View Code
  • 相关阅读:
    java-学习8
    java-学习7
    java-学习6
    html----h1-6标签
    jquery.cookie介绍和用法
    java-学习5
    java-学习4
    Eclipse里的代码光标变成一个黑色块
    java-学习3(jdk-环境配置)
    箭头函数无法使用this的解决方法
  • 原文地址:https://www.cnblogs.com/xiaozhuyang/p/hdu4632.html
Copyright © 2020-2023  润新知