題目大意:
求兩個序列的最長子序列
**:#include#include#include#includeusing namespace std;
int n, p, q;
const int maxn = 250*250;
int num1[maxn];
int hash[maxn], stack[maxn];
int main()
int top=0;
stack[0] = -1;
for(int i=1; i<=q; i++) {
scanf("%d", &x);
x = num1[x];
if(x) {
if(x > stack[top]) stack[++top]=x;
else {//這裡一開始想的很簡單,覺得只要與倒二個比較,若比待插入的數字小,則替換最後乙個數字,後來發現不行,還是要找到第乙個比他大的位置替換.
int l=1, r=top;
while(l<=r) {
int mid = (l+r)/2;
if(stack[mid]
思路:一開始看題目覺得好水,用二位陣列做,後來發現dp[250*250][250*250]是不行的,看了某博主的做法,只需一維陣列.
用乙個一維陣列記錄第一行輸入資料(下標為值,儲存位置),輸入第二組時,只有在判斷輸入的數出現在了第一組才進行相應操作,即用乙個陣列儲存有序序列,最後陣列下標即為長度.
Prince and Princess問題解決
這是突然看到的乙個非常有意思的題,是acm icpc的原題,在這裡稍微做一些分析,希望對大家有幫助。王子m和公主hff相愛,想要娶公主。雖然公主非常願意,但是並不是王國裡每個人都支援這一場婚姻。而為了娶到公主,王子需要完成乙個挑戰 在n個房間中找出公主在哪。每個房間有乙個人,他們彼此知道誰在哪個房間...
Colored Rectangles 動態規劃
題意 三種木棍,分別有 r對 g對 b對兩種不同木棍對可以弄移乙個矩形,要求矩形面積總和最大 思路 看題面,這種幾個變數互相影響並且最終目標固定的題目感覺就要用dp,而且資料比較小應該就是能用三維dp,雖然我比賽時沒做出來,但是我想的挺明白的,狀態轉移就是dp i j k max dp i 1 j ...
hdu1513 Palindrome 動態規劃
求讓乙個字串變為回文串所需最少插入字元數 定義狀態dp i j 表示從左到右i個字元,從右到左j個字元,要讓他們回文需要插入多少字元 顯然,a i a j 時,dp i j d p i 1 j 1 a i a j 時,就需要插入乙個字元,因此dp i j m in d p i 1 j dp i j ...