江哥的DP題(B)

2022-02-26 13:13:01 字數 1088 閱讀 6807

【題目描述】

給定兩個1~n的序列a、b,如果ai=bj,則能夠在ai、bj之間連一條直線,要求每條直線至多與一條直線相交。

【輸入描述】

第一行輸入乙個正整數n;

第二行輸入n個正整數,表示序列a的元素;

第三行輸入n個正整數,表示序列b的元素。

【輸出描述】

輸出乙個整數,表示最大的合法連線數量。

【樣例輸入】

71 5 7 3 2 6 4

7 3 4 1 6 5 2

【樣例輸出】

4【資料範圍及提示】

對於30%的資料,n ≤ 20; 

對於100%的資料,n ≤ 1000。

源**:

#include

#include

using

namespace

std;

int n,i1[1001],i2[1001],j1[1001],j2[1001],f[1001][1001

];int max(int t1,int t2,int

t3)int

main()

for (int a=1;a<=n;a++)

for (int a=1;a<=n;a++)

for (int b=1;b<=n;b++)

if (i1[a]==i2[b])

f[a][b]=f[a-1][b-1]+1

;

else

printf("%d

",f[n][n]);

return0;

}/*這個dp就厲害了。

最近看多了廁廁的上樹直播,所以說話一股摩登味,不要介意。

設f[i][j]表示取序列a前i個元素與序列b前j個元素的最多連線數量,則有如下狀態轉移方程:

(1)a[i]=b[j]

f[i][j]=f[i-1][j-1]+1

(2)a[i]≠b[j]

f[i][j]=max(f[x][y]+2,f[i-1][b],f[i][j-1])(x表示b[j]在序列a中的位置,y與此同理)。

此型別的dp似乎可以用前n項來二維實現。

*/

CODE VS 江哥的DP題b

原題 江哥解題報告 我們不妨按照江哥dalao的思路來寫 設f i,j 表示a中列舉到了第i個,b中列舉到了第j個,則 a i b j f i,j f i 1,j 1 1 如果相等就可以增加一條線 a i b j f i,j max a1,b1是要幹什麼呢?不妨看一看這張圖 找到當前b j 所對應的...

4816 江哥的dp題b

時間限制 1 s 空間限制 256000 kb 題目等級 gold 題解給出兩個1 n的隨機排列a,b。若ai bj,則你可以在ai,bj之間連一條線。要求每條線至多與一條線相交。下圖分別說明了一種合法和不合法的方案。輸入描述 input description 第一行乙個正整數n。接下來一行n個正...

江哥的DP題(A)

題目描述 給定乙個長度為n的序列a a1 a2 a3 an 取k個互不相同的元素,使得 1 兩兩元素互不相鄰 2 元素之和最大。輸入描述 第一行輸入兩個正整數n k 第二行輸入n個整數,表示序列a中的元素。輸出描述 輸出乙個整數,表示最大和。樣例輸入 樣例1 7 33 5 7 1 9 10 7 樣例...