hdu 5791 思维dp
题目描述:
求序列A,B的公共子序列个数;
基本思路:
想到了dp,选的状态也对,但是就是就是写不出状态转移方程,然后他们都出了,到最后我还是没出,很难受,然后主要是没有仔细考虑dp【i】【j】,dp【i】【j-1】,dp【i-1】【j】,dp【i-1】【j-1】在A【
i】和B【i】在相同和不相同是的数量关系,我为啥就没想到要减呢,只想着怎么把他们加起来,着实智障;
定义状态dp【i】【j】为序列A扫到i,序列B扫到B时候的公共子序列个数,状态转移方程如下:

其实这个状态转移方程也没那么好证明,但仔细想一想,如果相等的话,不过就是dp【i】【j-1】和dp【i-1】【j】的公共部分和a【i】和b【j】这一对组合,这公共部分在dp【i】【j-1】和dp【i-1】【j】中必定是重合的,然后就是还有a【i】和b【j】这一对组合单独着,然后状态转移方程就是上面第一个状态转移方程这样,然后第二个也是一样的考虑方式;(说实话把他放到简单dp里,我还是很羞愧的);
代码如下:
#include<iostream>
#include<sstream>
#include<iomanip>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<list>
#include<map>
#include<set>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring> using namespace std; typedef long long ll;
typedef long double ld;
#define rep(a,b,c) for(int (a)=(b);(a)<=(c);(a)++)
#define drep(a,b,c) for(int (a)=(b);(a)=>(c);(a)--)
const int inf = 0x3f3f3f3f;
const double eps = 1e-;
const int mod = ; const int maxn = +;
ll dp[maxn][maxn];
int s[maxn],t[maxn]; int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==)
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++) scanf("%d",&s[i]);
for(int j=;j<=m;j++) scanf("%d",&t[j]);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(s[i]==t[j])
{
dp[i][j]=(dp[i-][j]+dp[i][j-]++mod)%mod;
}
else
{
dp[i][j]=(dp[i][j-]+dp[i-][j]-dp[i-][j-]+mod)%mod;
}
}
}
printf("%I64d\n",dp[n][m]);
}
return ;
}
hdu 5791 思维dp的更多相关文章
- HDU 5791 Two DP
Two Problem Description Alice gets two sequences A and B. A easy problem comes. How many pair of ...
- hdu 5791 (DP) Two
hdu 5791 Two Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu 3709 数字dp(小思)
http://acm.hdu.edu.cn/showproblem.php?pid=3709 Problem Description A balanced number is a non-negati ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
- hdu 4507 数位dp(求和,求平方和)
http://acm.hdu.edu.cn/showproblem.php?pid=4507 Problem Description 单身! 依旧单身! 吉哥依旧单身! DS级码农吉哥依旧单身! 所以 ...
- hdu 4352 数位dp + 状态压缩
XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化
HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...
- HDU 2588 思维 容斥
求满足$1<=X<=N ,(X,N)>=M$的个数,其中$N, M (2<=N<=1000000000, 1<=M<=N)$. 首先,假定$(x, n)=m$ ...
随机推荐
- Qt 样式表鼠标滑过按钮更改Text文本颜色
QSS语法参考http://blog.csdn.net/liang19890820/article/details/51691212 Qt助手上也有比较详细的说明,选择器以及伪选择器,现在只是做个简单 ...
- JSP自定义方法标签
1.自定义方法标签 引入方式示例: <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> 写 ...
- ansible_playbook语法中的循环语句归纳
种类一.标准循环添加多个用户 - name: add several users user: name={{ item }} state=present groups=wheel with_items ...
- Service系统服务(三):查看进程信息、进程调度及终止、系统日志分析、使用systemctl工具
一.查看进程信息 目标: 本例要求掌握查看进程信息的操作,使用必要的命令工具完成下列任务: 找出进程 gdm 的 PID 编号值 列出由进程 gdm 开始的子进程树结构信息 找出进程 sshd 的父进 ...
- jquery实现回车键登录/搜索等确认功能
button按钮提交方式: $('#search').click(function() { get_table(); }); //keyCode=13是回车键,设置回车键提交 $("body ...
- PyCharm 默认快捷键
1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完 ...
- ZROI week3
作业 poj 1091 跳蚤 容斥原理. 考虑能否跳到旁边就是卡牌的\(gcd\)是否是1,可以根据裴蜀定理证明. 考虑正着做十分的麻烦,所以倒着做,也就是用\(M^N - (不合法)\)即可. 不合 ...
- 有关于css的四种布局
四种布局 (1).左右两侧,左侧固定宽度200px, 右侧自适应占满. (2).左中右三列,左右个200px固定,中间自适应占满. (3).上中下三行,头部200px高,底部200px高,中间自适应占 ...
- JAVA StringUtils方法全集
StringUtils方法全集 org.apache.commons.lang.StringUtils中方法的操作对象是java.lang.String类型的对象,是JDK提供 的String类型操作 ...
- Polysh实现多服务器批量执行shell
安装 wget wget http://guichaz.free.fr/polysh/files/polysh-0.4.tar.gz tar -zxvf polysh-0.4.tar.gz cd po ...