P2679 0分球调
查看原帖
P2679 0分球调
781159
Lovely_Elaina楼主2023/8/4 23:10
#include <bits/stdc++.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define endl '\n'
using namespace std;
const int N = 1005;
const int M = 205;
const int mod = 1e9+7;

int n,m,k;
int f[2][M][M];
int t[2][M][M];
char a[N],b[N];

/*
a[i] == b[i] 选:t[i&1][j][p] = (t[i-1&1][j-1][p] + f[i-1&1][j-1][p-1]) % mod
a[i] != b[i] 不选:t[i&1][j][p] = 0;
f[i&1][j][p] = (f[i-1&1][j][p] + t[i&1][j][p]) % mod
*/

int main(){
    ios::sync_with_stdio(0);
    cin.tie(NULL);

    cin >> n >> m >> k;
    cin >> a+1 >> b+1;

    f[0][0][0] = 1;
    for(int i = 1; i <= n; i++){
        f[i&1][0][0] = 1;
        for(int j = 1; j <= m; j++){
            for(int p = 1; p <= k; p++){
                if(a[i] == b[i])
                    t[i&1][j][p] = (t[(i-1)&1][j-1][p] + f[(i-1)&1][j-1][p-1]) % mod;
                else t[i&1][j][p] = 0;
                f[i&1][j][p] = (f[(i-1)&1][j][p] + t[i&1][j][p]) % mod;
            }
        }
    }

    cout << f[n&1][m][k] << endl;
    return 0;
}
2023/8/4 23:10
加载中...