NOIP2015 子串 解题报告(DP)

原创 2016年08月28日 16:40:48

在线评测:

http://codevs.cn/problem/4560/

整体思路:

dp i,j,k,(0/1) 表示A扫到第i位,B扫到第j位,还可以分成k个子串,当前 这一位加不加入子串;

这时候我们发现空间是不足以AC的,所以我们可以滚动数组一下。

最后我们可以得到DP方程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (int i = 1;i <= n;i++)
    {
        for (int j = m;j >= 1;j--)
        {
            for (int o = k;o >= 0;o--)
            {
                f[j][o][0] = f[j][o][0] +f[j][o][1];
                f[j][o][0] %= mo;
                if (a[i-1] != b[j-1])
                    f[j][o][1] = 0;else
                    if (o > 0)
                    f[j][o][1] = f[j-1][o-1][0] + f[j-1][o-1][1] + f[j-1][o][1];
                f[j][o][1] %= mo;
            }
        }
    }

失误之处:

开始没有取模,,取模后发现取模的值都爆int,然后gg,就60分

体会心得:

看好数据的范围,,,

AC代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,k;
const long long mo = 1000000007;
long long f[250][250][2];
char a[1200],b[1200];
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    scanf("%s%s",a,b);
    f[0][0][0] = 1;
    for (int i = 1;i <= n;i++)
    {
        for (int j = m;j >= 1;j--)
        {
            for (int o = k;o >= 0;o--)
            {
                f[j][o][0] = f[j][o][0] +f[j][o][1];
                f[j][o][0] %= mo;
                if (a[i-1] != b[j-1])
                    f[j][o][1] = 0;else
                    if (o > 0)
                    f[j][o][1] = f[j-1][o-1][0] + f[j-1][o-1][1] + f[j-1][o][1];
                f[j][o][1] %= mo;
            }
        }
    }
    printf("%lld\n",(f[m][k][0] + f[m][k][1]) % mo);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NOIP2015 信息传递 解题报告(强连通分量)

在线评测: http://codevs.cn/problem/4511/ 整体思路: 说白了就把这看成一张图,找一个大小不为1的最小的强连通分量即可 失误之处: 没啥失误...

NOIP2015 跳石头 解题报告(二分答案)

在线评测: http://codevs.cn/problem/4768/ 整体思路: 二分答案,看可不可以就行 失误之处: 没有考虑中间没有石头的情况, 体会心得:...

今天开始

以后经常记下自己的体会和碰到的问题.每天都要有点进步

NOIP2015 神奇的幻方 解题报告(水题模拟)

在线评测: http://codevs.cn/problem/4510/ 整体思路: 枚举一的位置,然后模拟就行了 失误之处: 数据<39,然后,我就把记录上一个点的数组...

NOIP2010 乌龟棋 解题报告(4维DP)

在线评测: http://codevs.cn/problem/1068/ 整体思路: 因为卡片只有1,2,3,4四种卡片,所以四维dp分别表示每种卡片用了多少张情况下所能得到的最大分...

NOIP2016 的一些记录

第一次NOIP,也是最后一次,在某(ju ruo)省还是应该水到了一等奖,大概记录一下,自己考试的一点状态和感受和吐嘈。 首先,酒店据说是准4星,然后,嗯。厕所门关不上,沙发是歪的,电源插排坏了一次...

NOIP2015 斗地主 解题报告(搜索)

在线评测: http://codevs.cn/problem/4610/ 整体思路: 首先我们明确一件事,如果手里的牌不打龙的话,那么通过贪心,最优解是固定的。那么我们可以只去搜索龙...

NOI openjudge 6043:哆啦A梦的时光机(双向宽搜)

在线评测: http://noi.openjudge.cn/ch0407/6043/ 整体思路: 这种题随便宽搜一下就好了,没啥思路可讲,,,, 失误之处: 1、开始脑子...

NOIP历年搜索整理

懒人终于开始写博客啦!~~~撒花~~~ 这两天集中做了一下历届noip的搜索,还是很有收获的,所以整理成一篇文章。自认为是按照难度从小到大做的QWQ 1.noip 2004 虫食算 【所以我还是粘一下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)