題目:
我們在兩條獨立的水平線上按給定的順序寫下 A 和 B 中的整數。
現在,我們可以繪製一些連接兩個數字 A[i] 和 B[j] 的直線,只要 A[i] == B[j],且我們繪製的直線不與任何其他連線(非水平線)相交。
以這種方法繪製線條,並返回我們可以繪製的最大連線數。
示例 1:
輸入:A = [1,4,2], B = [1,2,4]
輸出:2
解釋:
我們可以畫出兩條不交叉的線,如上圖所示。
我們無法畫出第三條不相交的直線,因爲從 A[1]=4 到 B[2]=4 的直線將與從 A[2]=2 到 B[1]=2 的直線相交。
示例 2:
輸入:A = [2,5,1,2,5], B = [10,5,2,1,5,2]
輸出:3
示例 3:
輸入:A = [1,3,7,1,7,5], B = [1,9,2,5,1]
輸出:2
提示:
1 <= A.length <= 500
1 <= B.length <= 500
1 <= A[i], B[i] <= 2000
代碼:
class Solution {
public:
int ans[505][505];
Solution()
{
memset(ans,-1,sizeof(ans));
}
int maxUncrossedLines(vector<int>& A, vector<int>& B) {
return maxUncrossedLines(A,B,A.size()-1,B.size()-1);
}
int maxUncrossedLines(vector<int>& A, vector<int>& B,int ka,int kb) {
if(ka<0||kb<0)return 0;
if(ans[ka][kb]>=0)return ans[ka][kb];
if(A[ka]==B[kb])return ans[ka][kb]=maxUncrossedLines(A,B,ka-1,kb-1)+1;
return ans[ka][kb]=max(maxUncrossedLines(A,B,ka,kb-1),maxUncrossedLines(A,B,ka-1,kb));
}
};