時間限制: 1 s
空間限制: 256000 kb
題目等級 : ** gold
題解給出兩個1~n的隨機排列a,b。若ai=bj,則你可以在ai,bj之間連一條線。要求每條線至多與一條線相交。下圖分別說明了一種合法和不合法的方案。
輸入描述 input description
第一行乙個正整數n。
接下來一行n個正整數,描述a。
接下來一行n個正整數,描述b。
輸出描述 output description
輸出一行乙個整數,描述答案(最大合法連線數量)。
樣例輸入 sample input
1 5 7 3 2 6 4
7 3 4 1 6 5 2
樣例輸出 sample output
資料範圍及提示 data size & hint
測試點編號 資料範圍
1,2,3 n≤20
4,5,6,7,8,9,10 n≤1000
分類標籤 tags 點此展開
ac**:
/*設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][j],f[i][j-1])(x表示b[j]在序列a中的位置,y與此同理)。
此型別的dp似乎可以用前n項來二維實現。
*/#include
#include
using
namespace
std;
const
int n=1e3+1
;int
n,a[n],b[n],pa[n],pb[n],f[n][n];
intmain()}}
printf("%d
",f[n][n]);
return0;
}
江哥的DP題(B)
題目描述 給定兩個1 n的序列a b,如果ai bj,則能夠在ai bj之間連一條直線,要求每條直線至多與一條直線相交。輸入描述 第一行輸入乙個正整數n 第二行輸入n個正整數,表示序列a的元素 第三行輸入n個正整數,表示序列b的元素。輸出描述 輸出乙個整數,表示最大的合法連線數量。樣例輸入 71 5...
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 所對應的...
江哥的DP題(A)
題目描述 給定乙個長度為n的序列a a1 a2 a3 an 取k個互不相同的元素,使得 1 兩兩元素互不相鄰 2 元素之和最大。輸入描述 第一行輸入兩個正整數n k 第二行輸入n個整數,表示序列a中的元素。輸出描述 輸出乙個整數,表示最大和。樣例輸入 樣例1 7 33 5 7 1 9 10 7 樣例...