Jzoj5424 鳳凰院兇真

2021-08-10 11:53:13 字數 703 閱讀 3750

給你兩個序列a和b,求出他們的最長公共上公升子串行並輸出方案

動態規劃,我們假設f[i][j]表示a處理到第i位,b處理到第j位時的長度

那麼顯然,若a[i]=b[j],那麼f[i][j]=max+1,否則f[i][j]=f[i-1][j]

我們再記乙個g[i][j]表示f[i][j]是從**轉移過來的,記上面那個k即可

到時候直接倒序遞迴按照g[i][j]輸出,若g[i][j]=0那麼就--i

#pragma gcc optimize("o3")

#pragma g++ optimize("o3")

#include

#include

#include

using

namespace

std;

int f[5010][5010],g[5010][5010],a[5010],b[5010],n,m;

void print(int i,int j)

}int main()

if(a[i]>b[j]&&f[i-1][k]1][j]) k=j;

} }int j=0;

for(int i=m;i;--i)

if(f[n][i]>f[n][j]) j=i;

printf("%d\n",f[n][j]);

print(n,j);

}

Jzoj5424 鳳凰院兇真

給你兩個序列a和b,求出他們的最長公共上公升子串行並輸出方案 動態規劃,我們假設f i j 表示a處理到第i位,b處理到第j位時的長度 那麼顯然,若a i b j 那麼f i j max 1,否則f i j f i 1 j 我們再記乙個g i j 表示f i j 是從 轉移過來的,記上面那個k即可 ...

BZOJ 5424 燒橋計畫 單調佇列

題目鏈結 先考慮最暴力的 dp 設 f k i 表示搞掉第 1 sim i 段,燒了 k 段的最小花費,設 calc x,y sum x sim y le m?0 sum x sim y 可以列出轉移方程如下 f k i min f k 1 j calc j 1,i k a i j 這樣時間複雜度是...

JZOJ 交換 模擬

給出字串s和字串t,現在你要把s的某乙個字元和t的某乙個字元交換,使得交換之後的s至少要有三個連續相同的字元,交換之後的t也要有三個連續相同的字元。問有多少種不同的交換方式。第一行,乙個字串s。s只含有 r g b 三種字元,長度不超過50,不小於3。而且s任意兩個相鄰的字元都不相同。第二行,乙個字...