C. String Game ###K ###K ###K //K

题目链接:https://codeforces.ml/gym/308590/submit 

题意:给定字符串A 和字符串B 问B在A中子序列的出现次数

思路: 计数dp  dp[i][j] 代表A串前i个中 出现B串的前j个数  每次dp[i][j]=dp[i-1][j]继承过来

当a[i]==b[j]的时候 dp[i][j]+=dp[i-1][j-1]    所有的 dp[i][0]=1  因为是合法情况

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 #define pb push_back
 4 using namespace std;
 5 const int maxn=1e3+10;
 6 const int mod=1e9+7;
 7 int dp[maxn*5][maxn];
 8  
 9  
10 int main()
11 {
12     ios::sync_with_stdio(0);
13     cin.tie(0);
14     string a,b;
15     while(cin>>a>>b)
16     {
17         memset(dp,0,sizeof(dp));
18         int n=a.size(),m=b.size();
19         for(int i=1;i<=n;i++)
20         {
21             for(int j=1;j<=m;j++)
22             {
23                 dp[i][j]=dp[i-1][j];
24                 if(a[i-1]==b[j-1])
25                 {
26                     if(j==1)
27                         dp[i][j]++;
28                     else
29                         dp[i][j]+=dp[i-1][j-1];
30                 }
31                 dp[i][j]%=mod;
32             }
33         }
34         cout<<dp[n][m]<<'\n';
35     }
36  
37  
38  
39  
40 }
View Code

 

看似子串中麻烦的需要去重的 其实dp可以解决

类似的题目 https://ac.nowcoder.com/acm/contest/9981/A

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e6+10;
 4 const int mod=1e9+7;
 5 #define ll long long
 6 #define pi pair<int,int>
 7 #define fi first
 8 #define sc second
 9 #define pb push_back
10 
11 ll dp[maxn][3];
12 
13 
14 int main()
15 {
16     ios::sync_with_stdio(0);
17     cin.tie(0);
18     dp[1][0]=25;
19     dp[1][1]=1;
20     int n;
21     cin>>n;
22     ll ans=0;
23     for(int i=2;i<=n;i++)
24     {
25         dp[i][0]=dp[i-1][0]*25%mod;
26         dp[i][1]=dp[i-1][0]+dp[i-1][1]*25%mod;
27         dp[i][1]%=mod;
28         dp[i][2]=dp[i-1][1]+dp[i-1][2]*26;
29         dp[i][2]%=mod;
30         ans+=dp[i][2];
31         ans%=mod;
32     }
33     cout<<ans<<'\n';
34 
35 
36 
37 
38 }
View Code

dp[i][0/1/2] 长度为i的串中 出现j个 子串us 的 方案数

 

posted @ 2020-12-19 21:21  canwinfor  阅读(151)  评论(0)    收藏  举报