#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...