rqnoj 26 合唱隊形(雙向序列dp)

2021-06-20 22:41:59 字數 846 閱讀 4078

#includeint main()

// if(dp[i][0]>1&&dp[i][1]>1)

}for(int i=n-2;i>=0;i--)

}// if(dp[i][0]>1&&dp[i][1]>1)

}for(int i=0;i(dp[i][0]+dp[i][1])?max:(dp[i][0]+dp[i][1]);

}printf("%d",n-max+1);

}

這道題  第一眼看的時候 沒仔細讀題,以為是求最長上公升序列,以為以前寫過,當時就直接拍碼了

寫了一半才發現原來是要求先上公升再下降。。。。。。。。。。

上公升最長的加下降最長的,可以求max(dp[i},dp[j]+1)求最長上公升,然後求最長下降

當時想的是把上公升和下降寫到同乙個for裡

這樣看起來是求了乙個上公升子串行和乙個下降子串行

但是 在求最長下降的時候他的dp[i]值就最小的在前面

這這裡wrong了好幾次

序列dp 在前兩篇部落格寫了。。。

這裡就直接**了

#includeint main()

// if(dp[i][0]>1&&dp[i][1]>1)

}for(int i=n-2;i>=0;i--)

}// if(dp[i][0]>1&&dp[i][1]>1)

}for(int i=0;i(dp[i][0]+dp[i][1])?max:(dp[i][0]+dp[i][1]);

}printf("%d",n-max+1);

}

FJUT 2399 合唱隊形 雙向lis

合唱隊形 timelimit 1000ms memorylimit 128mb 64 bit integer io format lld n位同學站成一排,老師要請其中的 n k 位同學出列,使得剩下的k位同學排成合唱隊形。合唱隊形是指這樣的一種隊形 設k位同學從左到右依次編號為1,2 k,他們的身...

cugb 1009 合唱隊形 (子串行)

昨天看了好長時間還是沒思路,看了別人的思路卻沒看懂,早上忍不住就問了老大一下 xy 嘿嘿,因為求之後 列舉的是以某個數為頂點 左右兩邊最長的序列 一語驚醒夢中人啊!還是我太笨呢?反正現在會了。第一次,求以a i 為結束點的最長上公升子串行,第二次,求以a i 為起始點的最長下降子串行,這兩個都求出來...

合唱隊形 最長上公升子串行變形

一 思路 感覺自己好笨 雖然知道是求兩次最長上公升子串行,一邊上公升,一邊下降 我愣是理解成了,寫兩個,都是順序來,乙個是求順序的最長上公升 乙個是順序的最長下降 怎麼除錯都是20 40個得分點 鬱悶了求兩次 成開口向下的拋物線 順序求上公升 逆序求上公升 然後求max aup i areverse...