總時間限制:
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 abfcabprogramming contest
abcd mnp
樣例輸出
42
/* 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函式 這個也可以...