首页 > 其他分享 >P2679 [NOIP2015 提高组] 子串 题解

P2679 [NOIP2015 提高组] 子串 题解

时间:2023-10-23 23:33:56浏览次数:37  
标签:NOIP2015 205 int 题解 cin P2679 dp MOD

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 1000000007;
int n,m,k,dp[205][205][2];
char A[1005],B[205];
signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> m >> k;
    cin >> (A+1) >> (B+1);
    for(int i = 1;i <= n;++i) {
        dp[0][0][0] = 1;
        for(int j = min(i,m);j >= 1;--j) {
            for(int p = min(k,j);p >= 1;--p) {
                dp[j][p][0] = (dp[j][p][1] + dp[j][p][0]) % MOD;
                if(A[i] == B[j])
                    dp[j][p][1] = (dp[j-1][p-1][0] + dp[j-1][p-1][1]+ dp[j-1][p][1])%MOD;
                else 
                    dp[j][p][1] = 0; //
            }
        }
    }
    cout << (dp[m][k][0]+dp[m][k][1]) % MOD << '\n';
    return 0;
}
//设dp[i][j][k][0/1] : A前i个,B前j个,A中划了k个子串,最后一个和现在这个i是否连续(挨着)
//无论何时 dp[i][j][k][0] = dp[i-1][j][k][0] + d[i-1][j][k][1];扔掉i之后前i-1和B前j划k个子串
//当 A_i == B_j 时
//  dp[i][j][k][1] = dp[i-1][j-1][k][1] + dp[i-1][j-1][k-1][0] + dp[i-1][j-1][k-1][1];
//    不看A[i],B[j](已经配对),只关注前面的来转移
//                    这个是连着前面            不连着前面              可以连着前面但是(由于划分不同也算不同所以可以)不连
//当 A_i != B_j 时
// dp[i][j][k][0] = 0;
//如果直接压维注意代码中的else

标签:NOIP2015,205,int,题解,cin,P2679,dp,MOD
From: https://www.cnblogs.com/xxxxxxxb/p/17783758.html

相关文章

  • P9754 [CSP-S 2023] 结构体 题解
    考前内心OS:“CCF不会出大模拟吧(((”。前置声明辅助函数:偏移量考虑一个结构体的偏移量。已知首个空地址\(\mathrm{address}\)和该结构体的对齐要求\(\mathrm{align}\),则该结构体正确的起始地址为\(\mathrm{\lceiladdress/align\rceil\timesalign}\)。i64shiftToAl......
  • CF1710 题解
    CF1710题解A看图写话。想象一个格子以及周围同色格的颜色必须呈一个三叉的形状:################这些三叉拼起来最小的形状,就是两个以上的整行,或整列。所以遍历每一种颜色,通过整......
  • CSP-S 2023 游记 & 总结 & 题解
    游记到了机房发现是Windows10,感觉不错。比赛开始果断启动虚拟机,怎么今年PDF密码这么复杂啊,我记得去年挺简单的来着,好像是believe2022?看了一遍题,有理由怀疑T1是J的题,但是一开始读错了,以为只能转一下,后来计算转动幅度的时候忘记对\(10\)取模,怒调1h。T2一开始以为是容......
  • 【题解】CF1710 合集
    CF1710AColorthePicture标签:思维题\(C^-\)典型的有图有真相,嘻嘻(抽风了?显然有一个结论,我们颜色要么一行一行天,要么一列一列填。并且填进去的颜色必须不少于两行/列然后就是记一个ans和一个over表示如果每个颜色都两行/列填进去能填的最多列数,以及两行/列填进去后还能......
  • Educational Codeforces Round 144(CF1796 D~E) 题解
    D.MaximumSubarray题目链接十分钟秒了一道*2000,非常爽,但是个人感觉确实非常简单。下面令\(b_i=a_{i}-x\),\(b_i'=a_i+x\)。因为\(k<=20\),因此考虑一个复杂度与\(k\)相关的做法。不妨dp:设\(f_{i,j,0/1}\)表示考虑了前\(i\)个数,对\(j\)个数加上了\(x\),第\(i\)......
  • CF1893E题解
    分析第一眼:博弈论。第二眼:呃……贪心?实际:DP。首先想这个游戏大抵存在必胜策略,否则不会让我们求。思考先手必胜条件,就是如何让这个数组最后只剩下一个数。设数列之和为\(sum\)。发现每次操作给两个数减的数字是一样的。那么对于每次操作,\(\Deltasum\)都为两者之间更少的......
  • CSP-S 2023 种树-题解
    CSP-S2023种树-题解闲话Mark.Down看错题面了,我一直以为树是倒着长的。题目描述给定一棵树,每天可以选择一个与已种树的地块相连的地块种树,每棵树每天会长\(max(1,c_i\timesx+b_i)\)米(\(x\)代表从任务开始第一天的天数),问最少多少天可以使\(\foralli\inn,Height_i\gea_i\)......
  • P8820(csp-s 2022 T4)题解
    背景:由于FZ考试因疫情取消,于是我们学校组织了线上测试。赛场连假做法都没打完,然后暴力忘记交了。。。题目链接参考博客题目评价:场切有点困难,但是76分比较容易。解法一眼\(ddp\),没话说。下面假设树以\(1\)为根。一次传输称作从一个点跳到另一个点。设询问的两个点为\(......
  • 题解合集
    CF1846:CF1846ACF1846BCF1846CCF1846DCF1846E......
  • CF1839D题解
    分析啊这道题就做得很难受了……手玩一下样例,不难发现答案就是分出\(k\)段不是单调上升序列的序列,求这些序列的最小长度和。显然有状态\(f_{l,r,k}\)表示\([l,r]\)序列分成\(k\)段的最小长度和。转移很好想,即枚举\(x\),\(y\)分别表示左区间的右端点以及段数,空间复杂度\(\math......