管道取珠题解DP

管道取珠

https://ac.nowcoder.com/acm/problem/17621

直接入手似乎有些困难,不妨将原问题作一点转化:
输出第i种特定序列的方案数a[i]即为二元组(X, Y)(其中X, Y分别代表一种输出第i种序列的方式,且X与Y相互独立)的组数。
设X所对应的方案为(ix, jx)(从上管道取出了ix个,从下管道取出了jx个),Y所对应的方案为(iy, jy)(含义类似于ix, jx)。
于是,可以用状态f[ix][jx][iy][jy]作一下更新:

1) 若上管道的第(ix + 1)个小球和上管道的第(iy + 1)个小球,那么更新状态f[ix + 1][jx][iy + 1][jy];
2) 若上管道的第(ix + 1)个小球和下管道的第(jy + 1)个小球,那么更新状态f[ix + 1][jx][iy][jy + 1];
3) 若下管道的第(jx + 1)个小球和上管道的第(iy + 1)个小球,那么更新状态f[ix][jx + 1][iy + 1][jy];
4) 若下管道的第(jx + 1)个小球和下管道的第(jy + 1)个小球,那么更新状态f[ix][jx + 1][iy][jy + 1]。
实际上我们知道ix + jx = iy + jy,于是可以减少一维的状态,把jy去掉。
思维性太强了啊 这题

#include <bits/stdc++.h>
using namespace std;
const int maxN = 510, MOD = 1024523;
int f[maxN][maxN][maxN], n, m; char up[maxN], dn[maxN];

inline void Add(int &a, int b)
{if ((a += b) >= MOD) a -= MOD; return;}

int main()
{

    scanf("%d%d%s%s", &n, &m, up + 1, dn + 1); f[0][0][0] = 1;
    for (int ix = 0; ix < n + 1; ++ix)
    for (int jx = 0; jx < m + 1; ++jx)
    for (int iy = 0; iy < n + 1; ++iy)
    if (f[ix][jx][iy])
    {
        int &t = f[ix][jx][iy], jy = ix + jx - iy;
        if (up[ix + 1] == up[iy + 1]) Add(f[ix + 1][jx][iy + 1], t);
        if (up[ix + 1] == dn[jy + 1]) Add(f[ix + 1][jx][iy], t);
        if (dn[jx + 1] == up[iy + 1]) Add(f[ix][jx + 1][iy + 1], t);
        if (dn[jx + 1] == dn[jy + 1]) Add(f[ix][jx + 1][iy], t);
    }
    printf("%d\n", f[n][m][n]);
return 0;
}
全部评论

相关推荐

10-13 13:49
南京大学 财务
饿魔:笑死我了,你简直是个天才
点赞 评论 收藏
分享
karis_aqa:和hr没关系,都是打工的
点赞 评论 收藏
分享
头像
10-22 20:13
中南大学 Java
序言大家好呀。我是希晨er,一个初入职场的程序猿小登最近上班摸鱼刷到了一篇文章:10年深漂,放弃高薪,回长沙一年有感,还有聊聊30岁大龄程序员过往的心路历程,突然就有点感慨。我如今也做出了和大明哥一样的抉择,只是更早。此外我22年的人生,好像从来没好好记录过。正好现在工作不太忙,就想把这些经历写下来,也希望能得到社区里各位前辈的指点个人背景我是03年出生的西安娃,父母都是普通打工人。刚从中南大学软件工程专业毕业半年,现在在老家的央企过着躺平摆烂的日子成长轨迹从农村到城市的童年我家并不是西安的,只是爸妈在西安上班,从小学之后就把我接到了西安。后来老家房子拆了,爷爷奶奶也搬了过来。农村的生活,我觉...
Yki_:看哭了,恋爱那一段你女朋友说你不够关心她,可你毕竟也愿意遇到矛盾写几千字来和她慢慢分析;说不愿意给她花钱,我感觉可能只是消费观不一样;如果她想留在长沙,也应该提前跟你说开。不过她也许会心疼你放弃大厂offer转向数字马力?我也因为同样的原因有过一段幸福而充满遗憾的感情,不过跟爱情相比确实前途更重要一点。至于offer的选择,换我我也会这么选。把这些旧事记录下来以后,接下来就好好向前看吧,加油兄弟
🍊晨光随笔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务