[BZOJ2423][HAOI2010]最长公共子序列(DP)
来源:互联网 发布:实体店出票软件 编辑:程序博客网 时间:2024/06/05 13:28
题意:给定两个字符串
设
第一问就是裸的最长公共子序列问题,注意滚动数组即可。
第二问,转移方程为:
1、当
2、当
3、当
4、当
注意使用滚动数组,避免空间超限。
代码:
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 5005, PYZ = 1e8;int m, n, f[2][N], g[2][N]; char s1[N], s2[N];int main() { scanf("%s", s1 + 1); scanf("%s", s2 + 1); m = strlen(s1 + 1) - 1, n = strlen(s2 + 1) - 1; int i, j; for (j = 0; j <= n; j++) g[0][j] = 1; for (i = 1; i <= m; i++) { int op = i & 1; g[op][0] = 1; for (j = 1; j <= n; j++) { if (s1[i] == s2[j]) f[op][j] = f[op ^ 1][j - 1] + 1, g[op][j] = g[op ^ 1][j - 1]; else f[op][j] = max(f[op ^ 1][j], f[op][j - 1]), g[op][j] = 0; if (f[op ^ 1][j] == f[op][j]) (g[op][j] += g[op ^ 1][j]) %= PYZ; if (f[op][j - 1] == f[op][j]) (g[op][j] += g[op][j - 1]) %= PYZ; if (f[op ^ 1][j - 1] == f[op][j]) (g[op][j] -= g[op ^ 1][j - 1]) %= PYZ; if (g[op][j] < 0) g[op][j] += PYZ; } } printf("%d\n%d\n", f[m & 1][n], g[m & 1][n]); return 0;}
阅读全文
1 0
- [BZOJ2423][HAOI2010]最长公共子序列(DP)
- BZOJ2423/HAOI2010 最长公共子序列
- BZOJ2423 [HAOI2010]最长公共子序列
- BZOJ2423 [HAOI2010]最长公共子序列 (LCS)
- 【bzoj2423】【HAOI2010】最长公共子序列
- bzoj2423 [HAOI2010]最长公共子序列
- 【HAOI2010】BZOJ2423 BSOJ2775 CODEVS1862 洛谷P2516 最长公共子序列
- 【动态规划】BZOJ2423: [HAOI2010]最长公共子序列
- [HAOI2010][DP]最长公共子序列
- bzoj 2423: [HAOI2010]最长公共子序列 (DP)
- [HAOI2010]最长公共子序列
- BZOJ 2423: [HAOI2010]最长公共子序列
- 洛谷P2516 [HAOI2010]最长公共子序列
- 2423: [HAOI2010]最长公共子序列
- 洛谷 P2516 [HAOI2010]最长公共子序列
- BZOJ 2423: [HAOI2010]最长公共子序列|动态规划
- bzoj 2423 [HAOI2010]最长公共子序列 动态规划
- 最长公共子序列(DP)
- 【redis】客户端
- ActiveMQ安装使用与spring整合配置教程
- Number对象常用属性与方法详解
- 对控制器类型“EnterPriseController”的操作“Class_Details”的当前请求在下列操作方法之间不明确:
- Python 环境搭建
- [BZOJ2423][HAOI2010]最长公共子序列(DP)
- 朴素贝叶斯分类器的应用 Naive Bayes classifier
- Android Studio 快捷键整理速查
- jsp页面双击td变成可编辑状态,焦点丢失保存
- k-均值:一种基于型心的技术
- 《怎样打开小米手机(已升级至MIUI8)的开发者选项》
- cropper.js 实现裁剪图片并上传(移动端)
- RelativeLayout 布局常用属性
- mybatis之resultMap的关联查询