zoukankan      html  css  js  c++  java
  • SSFOJ P1453 子序列(一) 题解

    每日一题 day61 打卡

    Analysis

    las数组表示的是最近一个为j的位置为是什么。

    dp数组的含义是以str[i]为结尾的子序列数量。

    于是有状态转移方程:

    dp[las[i][j]]+=dp[i];

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #define int long long
     6 #define maxn 1000000+10
     7 #define mod 998244353
     8 #define rep(i,s,e) for(register int i=s;i<=e;++i)
     9 #define dwn(i,s,e) for(register int i=s;i>=e;--i)
    10 using namespace std;
    11 inline int read()
    12 {
    13     int x=0,f=1;
    14     char c=getchar();
    15     while(c<'0'||c>'9') {if(c=='-') f=-1; c=getchar();}
    16     while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();}
    17     return f*x;
    18 }
    19 void write(int x)
    20 {
    21     if(x<0) {putchar('-'); x=-x;}
    22     if(x>9) write(x/10);
    23     putchar(x%10+'0');
    24 }
    25 int n,ans;
    26 char a[maxn];
    27 int m[31],dp[maxn];
    28 int las[maxn][31];
    29 signed main()
    30 {
    31     n=read();
    32     scanf("%s",a+1);
    33     rep(i,0,26) m[i]=n+1;
    34     dwn(i,n,0)
    35     {
    36         rep(j,0,25)
    37         {
    38             las[i][j]=m[j];
    39             if(i==0) continue;
    40         }
    41         m[a[i]-'a']=i;
    42     }
    43         
    44     dp[0]=1;
    45     rep(i,0,n)
    46     {
    47         rep(j,0,25)
    48         {
    49             dp[las[i][j]]+=dp[i];
    50             dp[las[i][j]]%=mod;
    51         }
    52     }
    53     rep(i,1,n) 
    54     {
    55         ans+=dp[i];
    56         ans%=mod;
    57     }
    58     write(ans);
    59     return 0;
    60 }

    请各位大佬斧正(反正我不认识斧正是什么意思)

  • 相关阅读:
    File操作
    集合
    几个python资料地址
    Case1-用list写shoppingcart
    字符串操作
    运算-Dictionary
    运算-list
    Python数据类型
    标准库和库导入
    Pycharm
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/12055998.html
Copyright © 2011-2022 走看看