OpenJudge Noi 1808 公共子串行

2021-07-27 11:09:28 字數 1301 閱讀 1010

總時間限制: 

1000ms 

記憶體限制: 

65536kb

描述 我們稱序列z = < z

1, z

2, ..., z

k >是序列x = < x

1, x

2, ..., x

m >的子串行當且僅當存在嚴格上公升的序列< i

1, i

2, ..., i

k >,使得對j = 1, 2, ... ,k, 有x

ij= z

j。比如z = < a, b, f, c > 是x = < a, b, c, f, b, c >的子串行。

現在給出兩個序列x和y,你的任務是找到x和y的最大公共子串行,也就是說要找到乙個最長的序列z,使得z既是x的子串行也是y的子串行。

輸入輸入包括多組測試資料。每組資料報括一行,給出兩個長度不超過200的字串,表示兩個序列。兩個字串之間由若干個空格隔開。

輸出對每組輸入資料,輸出一行,給出兩個序列的最大公共子串行的長度。

樣例輸入

abcfbc         abfcab

programming contest

abcd mnp

樣例輸出

4

2

/* 1.最優子問題 2.無後效性

動態規劃的思路就是在滿足上述2個條件下 找到另一種描述的形式 推出動態轉移方程(當然很多題目沒那麼容易想出來- -)

* dp[i][j]表示s1的前i個字元和s2的前j個字元的最大公共子列

* 動態轉移方程:

if (p[i] == q[j])

dp[i+1][j+1] = dp[i][j] + 1;

else

dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);

*/#include "iostream"

#include "cstring"

#include "algorithm"

using namespace std;

int main()

{ char p[201], q[201];

int dp[201][201];

while (cin >> p >> q) {

memset(dp, 0, sizeof(dp));

int lenp = strlen(p);

int lenq = strlen(q);

for (int i = 0; i

Openjudge NOI題庫 Pell數列

題目描述description pell數列a1,a2,a3,的定義是這樣的,a1 1,a2 2,an 2 an 1 an 2 n 2 給出乙個正整數k,要求pell數列的第k項模上32767是多少。輸入輸出格式input output 輸入 第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料...

Openjudge NOI題庫 變幻的矩陣

題目描述description 有乙個n x n n為奇數,且1 n 10 的矩陣,矩陣中的元素都是字元。這個矩陣可能會按照如下的幾種變幻法則之一進行變幻 只會變幻一次 現在給出乙個原始的矩陣,和乙個變幻後的矩陣,請編寫乙個程式,來判定原始矩陣是按照哪一種法則變幻為目標矩陣的。1.按照順時針方向旋轉...

Python 矩陣翻轉180度

在對影象做卷積的時候要對核矩陣進行180度翻轉。用python實現了一下。這裡分享 一下吧。首先需要說明的幾個基本問題。1.矩陣的切片 可以參考 廖雪峰的官方 python 切片 這裡主要要知道的就是 a 1 這個操作對於行向量可以左右翻轉 對於二維矩陣可以實現上下翻轉。如圖 map函式 這個也可以...