zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    poj 3096 Surprising Strings (set)
    hdu 4038 stone
    STL set 使用总结
    poj 3185 The Water Bowls (bfs 加未压缩)
    QPixmap显示图片
    addStretch的作用 .
    Qt SizeHint()
    StyleSheet
    linux编程守护进程编写
    Qt样式表的使用
  • 原文地址:https://www.cnblogs.com/xiaozhuyang/p/hdu4632.html
Copyright © 2011-2022 走看看