1. 程式人生 > >動態規劃(數形)

動態規劃(數形)

最長公共子序列問題

Time Limit: 1000ms   Memory limit: 65536K  有疑問?點這裡^_^

題目描述

 給定兩個序列X=

輸入

輸入資料有多組,每組有兩行 ,每行為一個長度不超過500的字串(輸入全是大寫英文字母(A,Z)),表示序列X和Y。

輸出

每組輸出一行,表示所求得的最長公共子序列的長度,若不存在公共子序列,則輸出0。

示例輸入

ABCBDAB
BDCABA

示例輸出

4

提示

來源

示例程式

#include<stdio.h>
#include<string.h>
int main()
{
int i,j,la1,la2,b1,b2,s[510][510];
char a1[505],a2[505];
while(gets(a1),gets(a2))
{


b1=b2=0;
la1=strlen(a1);
la2=strlen(a2);
for(i=0;i<=la1;i++)
s[i][0]=0;
for(j=0;j<=la2;j++)
s[0][j]=0;
for(i=1;i<=la1;i++)
for(j=1;j<=la2;j++)
{
if(a1[i-1]==a2[j-1])
s[i][j]=s[i-1][j-1]+1;
else{
b1=s[i-1][j];
b2=s[i][j-1];
if(b1>b2)s[i][j]=b1;
else s[i][j]=b2;
}
}
printf("%d\n",s[la1][la2]);

}
return 0;
}

相關推薦

動態規劃

最長公共子序列問題 Time Limit: 1000ms   Memory limit: 65536K  有疑問?點這裡^_^ 題目描述  給定兩個序列X= 輸入 輸入資料有多

動態規劃入門級-

題目:                                                        數塔 Description 在講述DP演算法的時候,一個經典的例子就是數塔問題,它是這樣描述的: 有如下所示的數塔,要求從頂層走到底層,若每一步只能走

動態規劃dynamic programming

program 選擇 因此 移動 開始 解決 特征 尋找 ima 1、動態規劃是通過組合字問題的解而解決整個問題的。 2、它與分治法的區別:     分治法是將問題分解為一些獨立的子問題,遞歸的求解各個子問題,然後合並子問題的解而得到源問題的解。     而動態規劃適合用於

動態規劃dynamic programming二、最優子問題與重疊子問題,以及與貪心的區別

貪心策略 找到 算法 找問題 貪心 模式 解決 策略 最優 一、動態規劃基礎   雖然我們在(一)中討論過動態規劃的裝配線問題,但是究竟什麽時候使用動態規劃?那麽我們就要清楚動態規劃方法的最優化問題中的兩個要素:最優子結構和重疊子問題。   1、最優子結構     1)如果

採藥-動態規劃01揹包

採用一維陣列進行優化 #include<cstdio> #include<algorithm> using namespace std; int w[105], v[105]; int dp[1005]; int main() { int m, n; sca

演算法基礎--動態規劃筆試記錄

#include<iostream> using namespace std; int main() { //輸入部分 //輸入寶箱的個數n,和現在還剩餘的魔法值w int n,w; cin>>n>>w; //int n = 5,w = 10;

二維動態規劃收集蘋果

平面上有N*M個格子,每個格子中放著一定數量的蘋果。你從左上角的格子開始,每一步只能向下走或是向右走,每次走到一個格子上就把格子裡的蘋果收集起來,這樣下去,你最多能收集到多少個蘋果 解這個問題與解其它的DP問題幾乎沒有什麼兩樣。第一步找到問題的“狀態”,第二步找到“狀態轉移方程”,然後基本上

987C___Three displays——動態規劃揹包+思維

題目連結:點我 題目大意:     nnn個物品,每個物品體積為sis_isi​,花費為cic_ici​,每次選333個物品,使這三個物品i&lt;j&lt;ki&lt;j&lt;ki<j<k,並且si&lt;

演算法-動態規劃數字三角形

數字三角形問題 問題描述:給定一個由n行數字組成的數字三角形,如下圖 7 3 8 8 1 0

2015百度校招之動態規劃兼職問題

晚上做完百度校招筆試題,真心覺得不再愛了,第一題圖片沒刷出來,第二題一看就有思路,結果花了20多分鐘寫程式碼,可竟然半個多小時除錯,還做錯了,第三題也是很簡單。因為前面的網站高併發導致的各種刷不出圖問題,很是影響手感。不吐槽了,動態規劃問題,只是這裡比普通的動態規劃多了層包

動態規劃Dynamic Programming的理解:從窮舉開始

int solve_by_brute_force(vector<int> &v, int cur, int limit, int sofar, int sum) { if (cur == limit) { // the border of recursion in

動態規劃演算法+理論 ★最短路徑

首先介紹動態規劃的概念: ①問題是由交疊的自問題構成的,是對給定問題求解的遞推關係中的相同型別的*更小子問題的解*dp+回溯 ②從頂至下,避免計算不需要計算的小解(記憶) ③求解最優化問題可以用動態規劃 動態規劃下筆寫程式碼前先去頂遞推式 直接看例項:

poj_1088 滑雪 動態規劃蓋澆飯演算法

題目 Michael喜歡滑雪百這並不奇怪, 因為滑雪的確很刺激。可是為了獲得速度,滑的區域必須向下傾斜,而且當你滑到坡底,你不得不再次走上坡或者等待升降機來載你。Michael想知道載一個區域中最長底滑坡。區域由一個二維陣列給 出。陣列的每個數 字代表點的高度。下面是一個

演算法之動態規劃爬樓梯

動態規劃的概念 通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。 動態規劃的基本思想 若要解一個給定問題,我們需要解其不同部分(即子問題),再合併子問題的解以得出原問題的解。 通常許多子

樹形動態規劃樹形DP入門問題—初探 & 訓練

#include<stdio.h> #include<string.h> #define N 6005 struct node { int pa,son; int next; }point[N]; //其實從這個結構體就可以看出很多東西,這就是一個靜態連結串列,在計算

打家劫舍——動態規劃java實現

 打家劫舍你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定一個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷

HDU——1176 免費餡餅動態規劃 類似塔問題

Problem Description 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10米範圍內。餡餅如果掉在了地上當然就不能吃了,所以gam

動態規劃題目--HDU

因為之前沒有怎麼接觸過演算法,在賽碼網上刷題,碰上了動態規劃類的題目。正好藉此機會系統的學習一下。 在嗶哩嗶哩上看演算法視訊,裡面講解了一道HDU上的題目,下面貼下題目描述: ime Limit: 1000/1000 MS (Java/Others)    Memory

POJ 3176動態規劃塔問題

數塔問題,比較基礎。 #include<iostream> #include<cstdio> #include<algorithm> using namespa

9.9遞歸和動態規劃——N皇後

其它 ace req case create lac any urn distance /** * 功能:打印八皇後在8*8棋盤上的各種擺法。當中每一個皇後都不同行、不同列,也不在對角線上。 * 這裏的“對角線”指的是全部的對角線,不僅僅是平分整個棋盤的那兩