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) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...
随机推荐
- 为你的PHP程序选择合适的密码库(初稿)
如果本文中的术语让你感到疑惑,请先参阅密码学术语及概念一文. 密码学不是魔术.加密一个应用程序并不能保证它在袭击下的安全(特别是在你没有设置验证密文的情况下).但如果出于商业需求你要确保程序的安全,传 ...
- Executing a script from Nagios event handler fails to run
I have Nagios running on a webserver. For this one Nagios service check in particular, if it fails, ...
- struts2 权限拦截器 拦截没有登陆的请求
假设有这样的登陆: ActionContext.getContext().getSession().put("UserMsg", userMsg); 则可以这样判断是否登陆: im ...
- java CMS gc解析
转载: http://www.blogjava.net/killme2008/archive/2009/09/22/295931.html CMS,全称Concurrent Low Pause ...
- [itint5]完全二叉树节点个数的统计
http://www.itint5.com/oj/#4 这题是利用完全二叉树的性质计算节点数目.那么是通过比较左右子树的最左结点的高度来看那边是满的,然后递归计算. //使用getLeftChildN ...
- JS插件excanvas的使用方法
这个还没有想好怎么写,等写好后再发布 试用了excanvas.js,生成静态统计图 IE下使用excanvas.js的注意事项
- Qt4.6.2已编译二进制版本在VS2005中的问题
结论1:如果你想把Qt4.6.2安装在VS2005中,又不想花时间编译,请下载和安装qt-win-opensource-4.6.2-vs2008,并单独编译“QT安装路径/src/winmain/” ...
- 启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法!
启动 Eclipse 弹出"Failed to load the JNI shared library jvm.dll"错误的解决方法 http://blog.csdn.net/z ...
- POJ3259——Wormholes(Bellman-Ford+SPFA)
Wormholes DescriptionWhile exploring his many farms, Farmer John has discovered a number of amazing ...
- 捕获Java线程池执行任务抛出的异常
捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常, public interface Runnable { publi ...