hdu1159 dp(最长公共子序列)
题意:给两个字符串,求这两个字符串的最长公共子序列的长度
因为之前集训的时候做过,所以现在即使会做也并不是什么稀奇的事,依旧为了自己的浅薄感到羞愧啊```
解法就是通过两个字符串的每个字符互相比较,根据比较情况相同与否确定递推关系:
dp [ i + 1 ] [ j + 1 ] 表示匹配到 a 字符串的第 i 个字符和 b 字符串的第 j 个字符时的最大匹配数,由于读字符串的时候我是从下标 0 读起的,但我需要用 dp [ 0 ] ,所以就都是加了一,否则也可以读入的时候直接从 a + 1 和 b + 1 读起。
当匹配到 a [ i ] 与 b [ j ] 时,若相等,则 dp [ i + 1 ] [ j + 1 ] = dp [ i ] [ j ] +1,即在匹配完 a [ i - 1 ] 和 b [ j - 1 ] 时的最大值再加上 1 组匹配;
若不相等,则 dp [ i + 1 ] [ j + 1 ] = max ( dp [ i + 1 ] [ j ] , dp [ i ] [ j + 1 ] )。
这样 dp 到最后就得出了结果。
#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b char a[],b[];
int dp[][]; int main(){
while(scanf("%s%s",a,b)!=EOF){
memset(dp,,sizeof(dp));
// printf("%s\n%s\n",a,b);
int l1=strlen(a),l2=strlen(b),i,j;
for(i=;i<l1;i++){
for(j=;j<l2;j++){
if(a[i]==b[j]){
dp[i+][j+]=dp[i][j]+;
}
else{
dp[i+][j+]=max(dp[i+][j],dp[i][j+]);
}
}
}
/* for(i=0;i<=l1;i++){
for(j=0;j<=l2;j++){
printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
}*/
printf("%d\n",dp[l1][l2]);
}
return ;
}
hdu1159 dp(最长公共子序列)的更多相关文章
- POJ 1159 Palindrome(区间DP/最长公共子序列+滚动数组)
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 56150 Accepted: 19398 Desc ...
- poj1159--Palindrome(dp:最长公共子序列变形 + 滚动数组)
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 53414 Accepted: 18449 Desc ...
- 经典dp 最长公共子序列
首先,说明一下子序列的定义…… 一个序列A={a1,a2,a3,...,an},从中删除任意若干项,剩余的序列叫A的一个子序列. 很明显(并不明显……),子序列……并不需要元素是连续的……(一开始的时 ...
- HDU 1159 Common Subsequence【dp+最长公共子序列】
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- POJ - 1458 Common Subsequence DP最长公共子序列(LCS)
Common Subsequence A subsequence of a given sequence is the given sequence with some elements (possi ...
- hdu 1503:Advanced Fruits(动态规划 DP & 最长公共子序列(LCS)问题升级版)
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- POJ1458 Common Subsequence —— DP 最长公共子序列(LCS)
题目链接:http://poj.org/problem?id=1458 Common Subsequence Time Limit: 1000MS Memory Limit: 10000K Tot ...
- HDU 1159 Common Subsequence --- DP入门之最长公共子序列
题目链接 基础的最长公共子序列 #include <bits/stdc++.h> using namespace std; ; char c[maxn],d[maxn]; int dp[m ...
- DP:LCS(最长公共子串、最长公共子序列)
1. 两者区别 约定:在本文中用 LCStr 表示最长公共子串(Longest Common Substring),LCSeq 表示最长公共子序列(Longest Common Subsequence ...
随机推荐
- go中for循环使用多个变量避坑
go for循环语法为: for expression1, expression2, expression3 { // ... } 使用多个变量时,使用平行赋值,需要留意的是expression3处的 ...
- RabbitMQ direct类型的Exchange
就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的direct类型就是指定将消息定向发送到哪个队列中. direct,顾名思义,就是直接的意 ...
- python socket 网络编程selector用法 (实用)
Server端: import socketimport selectors class Server(object):def init(self,sel,sock):self.sel = selse ...
- Android : 输入设备键值从底层到应用层的映射流程
一.Android输入子系统简介: Android输入事件的源头是位于/dev/input/下的设备节点,而输入系统的终点是由WMS管理的某个窗口.最初的输入事件为内核生成的原始事件,而最终交付给窗口 ...
- Ubuntu16.04 安装Tensorflow-CPU
最近我开始学习深度学习框架Tensorflow,一开始在windows平台下的anaconda下安装,由于anaconda安装几次后navigator打开老是出现闪退的问题,所以决定换个ubuntu下 ...
- tensorflow-优化器
优化器可以通俗的理解成梯度下降那一套流程. 梯度下降 基本流程 a. 损失函数 b. 求导,计算梯度 c. 更新参数 d. 迭代下一批样本 可以对照着理解tf. tf 优化器 正常使用流程 a. 创建 ...
- <顺序访问><随机访问><HDFS>
Overview 如果你了解过HDFS,至少看过这句话吧: HDFS is a filesystem designed for storing very large files with stream ...
- L296 EST 科技英语翻译-美学取向 (上)
tips:对语言进行恰如其分的润饰,讲究词法.句法及篇章的粘连,增加可读性. 1 Accuracy 精确性 科技文章用词要求准确,尽量避免含糊不清和一词多义 dead air静空气 2 Paralle ...
- 若sql语句中order by指定了多个字段,怎么排序?
举个例子吧: order by id desc,time desc 先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)
- 你知道怎么用Idea抽取方法、创建class吗?
liJ IDEA的快捷键是进行重构的利器,坊间盛传,完全使用IDEA快捷键重构的代码,是不需要写测试用例保护的 本文就分享一个使用IDEA抽取方法及创建新的class的方法 工具/原料 Intel ...