zoukankan      html  css  js  c++  java
  • UVA11081 string

     1 /*
     2 题意:T组测试,每行三个串,求 用前两个串的一些子串(可以是空)有多少种方式可以拼成第三个串。
     3 
     4 参考了  http://blog.csdn.net/u012997373/article/details/38762393?utm_source=tuicool&utm_medium=referral 
     5 
     6 用三个三维数组 。 
     7 f[i][j][k] 表示 拼到第三个串的第 K 个字符时,用到了第一个串的前 i 个字符, 第二个串的前 j 个字符。
     8 但是第 K 个字符的来源有两个地方,s1 和 s2, 
     9 所以用 f1[i][j][k]表示第 K 个字符来自 s1 串,f2 同理表示来自 s2 串 。
    10 辣么最后 f[i][j][k] = f1[i][j][k] + f2[i][j][k] ; 
    11  
    12 考虑到空串,初始化时  f[i][j][0] = f1[i][j][0] = f2[i][j][0] = 1 ; 
    13 */
    14 
    15 
    16 
    17 #include<cstdio>
    18 #include<cstring>
    19 #include<algorithm>
    20 using namespace std;
    21 const int maxn=65;
    22 const int MOD=10007;
    23 int f[maxn][maxn][maxn],f1[maxn][maxn][maxn],f2[maxn][maxn][maxn];
    24 char a[maxn],b[maxn],c[maxn];
    25 int main()
    26 {
    27     int t;
    28     scanf("%d",&t);
    29     while(t--)
    30     {
    31         scanf("%s%s%s",a,b,c);
    32         int la=strlen(a);
    33         int lb=strlen(b);
    34         int lc=strlen(c);
    35         memset(f1,0,sizeof(f1));
    36         memset(f2,0,sizeof(f2));
    37         memset(f,0,sizeof(f));
    38         for(int i=0;i<=la;i++)
    39             for(int j=0;j<=lb;j++)
    40             {
    41                 f[i][j][0]=1;
    42                 f1[i][j][0]=1;
    43                 f2[i][j][0]=1;
    44             }                        
    45         for(int k=1;k<=lc;k++)
    46         {
    47             for(int i=0;i<=la;i++)
    48             {
    49                 for(int j=0;j<=lb;j++)
    50                 {                    
    51                     if(i)
    52                     {
    53                         f1[i][j][k] = f1[i-1][j][k];
    54                         if(c[k-1] == a[i-1])
    55                             f1[i][j][k] = (f1[i][j][k] + f[i-1][j][k-1] ) % MOD;
    56                     }
    57                     if(j)
    58                     {
    59                         f2[i][j][k] = f2[i][j-1][k];
    60                         if(c[k-1] == b[j-1])
    61                             f2[i][j][k] =  ( f2[i][j][k] + f[i][j-1][k-1] ) % MOD;
    62                     }
    63                     f[i][j][k] = (f1[i][j][k] + f2[i][j][k]) % MOD;
    64                 }
    65             }            
    66         }
    67         printf("%d
    ",f[la][lb][lc]);
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/ember/p/4950922.html
Copyright © 2011-2022 走看看