HDU5791--Two (DP)
题意:两个数列a,b,求相同的子序列有多少对,内容相同位置不同也算不同。
题解:dp[i][j]表示a数列前i个数个 b数列前j个数 有多少对
递推方程: dp[i][j] = dp[i-1][j-1]( a[i]和b[j]都不用 ) + ∑(k<i&&a[k]==b[j])dp[k-1][j-1] + ∑(k<=j&&a[i]==b[k])dp[i-1][k-1];
for (int i = ; i <= n; ++i) {
for (int j = ; j <= m; ++j) {
dp[i][j] = ;
for (int k = ; k < i; ++k)
if (a[k] == b[j]) dp[i][j] = (dp[i][j] + dp[k-][j-]) % MOD;
for (int k = ; k <= j; ++k)
if (a[i] == b[k]) dp[i][j] = (dp[i][j] + dp[i-][k-]) % MOD;
dp[i][j] = (dp[i][j] + dp[i-][j-]) % MOD;
}
}
O(n^3)会超时,所以在每一步多求一些辅助值,可以优化到O(n^2)。
我知道这种做法没问题,但是比赛的时候打死都调不出来,最后还是队友做的,心烦。
突然想到我的做法貌似很蠢……哎 不管了。。。反正过了。。。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
#include <cmath>
#define CLR(x, r) memset(x, r, sizeof (x))
#define PF(x) printf("debug:%d\n", x) using namespace std;
typedef long long ll; const int N = ;
const ll MOD = ;
int a[N], b[N];
ll dp[N][N];
ll ax[N];
ll bx[N]; int main(int argc, char const *argv[])
{
freopen("in", "r", stdin);
int n, m;
while (~scanf("%d%d", &n, &m)) {
for (int i = ; i <= n; ++i) scanf("%d", a+i);
for (int i = ; i <= m; ++i) scanf("%d", b+i); for (int i = ; i <= n; ++i) dp[i][] = ;
for (int i = ; i <= m; ++i) dp[][i] = ;
CLR(ax, );
for (int j = ; j <= m; ++j) {
if (b[j] == a[]) bx[j] = bx[j-] + dp[][j-];
else bx[j] = bx[j-];
}
for (int i = ; i <= n; ++i) {
int ant = a[i+];
for (int j = ; j <= m; ++j) {
dp[i][j] = ; dp[i][j] = (dp[i][j] + ax[j]) % MOD; // 用到 b[j]
dp[i][j] = (dp[i][j] + bx[j]) % MOD; // 用到 a[i]
dp[i][j] = (dp[i][j] + dp[i-][j-]) % MOD; if (b[j] == ant) {
bx[j] = (bx[j-] + dp[i][j-]) % MOD;
} else {
bx[j] = bx[j-];
} if (b[j] == a[i]) {
ax[j] = (ax[j] + dp[i-][j-]) % MOD;
} }
} cout << (dp[n][m] - + MOD) % MOD << endl;
}
return ;
}
HDU5791--Two (DP)的更多相关文章
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- Python基础-输入输出(IO)
Python基础-输入输出(IO) 程序会有输入和输出,输入可以从标准输入或是从一个文件读入数据,程序的输出可以以一种友好可读的方式(human-readable)打印出来,或是写进一个文件,而标准输 ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
- 深入理解AngularJs-scope(二)
深入理解AngularJs-scope(一)中,我们对AngularJs的脏检测及其触发.异步任务队列进行了学习.紧接上一篇文章 深入理解AngularJs-scope(一),我们来看看scope对以 ...
- Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)
Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
随机推荐
- 重新学struct,边界对齐,声明……与Union的区别
在内存中,编译器按照成员列表顺序分别为每个结构体变量成员分配内存,当存储过程中需要满足边界对齐的要求时,编译器会在成员之间留下额外的内存空间. 如果想确认结构体占多少存储空间,则使用关键字sizeof ...
- 在ECLIPSE中用MAVEN和TOMCAT来建立WEBAPP
找了很多示例,结合以下两个URL,比较简单的测试了一下. http://blog.csdn.net/clj198606061111/article/details/20221133 http://ww ...
- NEERC 2014, Eastern subregional contest
最近做的一场比赛,把自己负责过的题目记一下好了. Problem B URAL 2013 Neither shaken nor stirred 题意:一个有向图,每个结点一个非负值,可以转移到其他结点 ...
- highcharts 根据表格转化为不同的图表
<!doctype html> <html lang="zh"> <head> <meta http-equiv="Conten ...
- [Unity菜鸟] Unity发布web后,从HTML调用本地文件
1. 遇到的问题 从xml读数据,xml的编码用中文就会乱码,改编码格式就调用不了.目前采用默认的ANSI编码. .exe .txt .xlsx .xml .test Run √ ...
- 二维图形的矩阵变换(三)——在WPF中的应用矩阵变换
原文:二维图形的矩阵变换(三)--在WPF中的应用矩阵变换 UIElement和RenderTransform 首先,我们来看看什么样的对象可以进行变换.在WPF中,用于呈现给用户的对象的基类为Vis ...
- puppet&mcollective客户端安装
一.环境: 1.客户端: fedora 19 2.DnsServer: 192.168.0.160 3.server1.xxx.com(10.8.1.201):运行以下服 ...
- 去掉php框架CI默认url中的index.php
CI默认的rewrite url中是类似这样的 例如你的CI根目录是在/CodeIgniter/下,你的下面的二级url就类似这样 http://localhost/CodeIgniter/index ...
- 不能设置sublime text 2 为默认编辑器
今天遇到一个有趣的事情,当我设置 css 样式表的默认打开方式的时候,却始终无法设置成功,系统总是随机选取一种打开方式来打开文件.比如:pdf.DW.txt等方式. 我设置默认打开方式的步骤如下: 1 ...
- 2013 ACM/ICPC Asia Regional Changsha Online - E
第一个被板刷的题 取余 依次算在周几 #include <iostream> #include<cstdio> #include<cstring> #include ...