經過在機房裡數日的切磁,lyd從社神牛那裡學會了分離與合體,出關前,杜神牛給了他乙個測試
杜神牛造了個區域,它們緊鄰著排成了一行,編號1-n。在這經個區域裡都放著一把oi界
的密鑰匙,每一把都有一定的價值,lyd當然想得到它們了。然而杜神牛規定lyd不可以一下子
把它們全部拿走,而是每次只可以拿一把。為了盡快地拿到所有的密鑰匙,lyd自然就用上了剛學的分離與合體特技。
開始lyd可以選擇從1~n-1的任何乙個區域(記為k)進入,進入後lyd會在k區域發
生分離,從而分離為兩個小lyd。分離完成的同時會有一面牆在k和k+1區域之間公升起,從而把
的區間內任選除了區間末尾區域以外(即1~k-1或k+1~n-1)的任何乙個區域再次發生分離
就一共有了4個小小lyd…重複進行以上所敘述的分離,直到每個小lyd發現自己所在的區間只剩下了乙個區域,他們就可以抱起自己夢寐以求的oi密鑰匙。
但是lyd不能就這麼分成n多個個體存在於世界上,這些小lyd還會再合體,合體的兩個小
lyd所在的區間中間的牆會消失。合體會獲得一定的價值,計算方法是:(合併後所在區間的左右
端區域裡密鑰匙的價值之和)乘(之前分離的時候所在區域的密鑰匙價值)
例如,lyd曾經在1~3區間中的2號區域分離成為1~2和3兩個區間,合併時獲得的價值就
是:(1號密鑰匙價值+3號價值)*(2號密鑰匙價值)
lyd請你程式設計求出最終可以獲得的總價值最大是多少。並按照分離階段從前到後,區域從左
向右的順序,輸出發生分離的區域編號
例如,先列印1分為2的分離區域,然後從左到右列印2分為4的分離區域,然後是4分為
的注意:若有多種方案,選擇分離區域盡量靠左的方案(也可以理解為輸出字典序最小的)
第一行乙個正整數n(2≤n≤300)
第二行為n個用空格分開的正整數,表示1~n區域裡每把密鑰匙的價值。
保證運算過程及結果不超出int範圍
第一行的乙個數,即獲得的最大價值。。
第二行按照分離階段從前到後,區域從左向右的順序,輸出發生分離的區域編號,中間用乙個空格隔開,若有多種方案,選擇分離區域盡量靠左的方案(也可以理解為輸出字典序最小的)
712
3456
7
23812
3456
因為合體價值 =(1號密鑰匙價值+3號價值)*(2號密鑰匙價值)所以說不難得到狀態轉移方程,簡直就是模板
dp[i]
[j]=
min(dp[i]
[j],dp[i]
[k]+ dp[k +1]
[j]+
(a[i]
+ a[j]
)* a[k]
)(其中dp[i]
[j]表示從區間[i,j]中能獲得的最大價值)
(k為劃分區間的斷點,合併石子般的模板)
(目標:dp[1]
[n])
第乙個問求最大值算出來很簡單,但第二個問求序列…(做到崩潰)
難點就是第二個求序列,求序列我們可以用乙個類似迭代加深的玄學玩意兒來解決。
先用乙個二維陣列road[i][j]來儲存關於區間[i,j]的斷點,也就是每一次擋板的房間,當dp[i][j]被更新時,road[i][j]也會改變,假如dp[i][j]變為了dp[i][k] + dp[k + 1][j] + (a[i] + a[j]) * a[k]那麼road[i][j]也會改變為k。
然後再用乙個搜尋來求出路徑。之後的搜尋就變得簡單了…
#include
#include
#include
using
namespace std;
const
int maxn =
1e3+5;
int a[maxn]
,dp[maxn]
[maxn]
,road[maxn]
[maxn]
,n,p;
int f =1;
void
dfs(
int x,
int y,
int cnt)
dfs(x,road[x]
[y],cnt +1)
;dfs
(road[x]
[y]+
1,y,cnt +1)
;}intmain()
}}}printf
("%d\n"
,dp[1]
[n])
;while
(f)return0;
}
分離與合體題解 區間DP DFS
題目描述 經過在機房裡數日的切磋,lyd 從杜神牛那裡學會了分離與合體,出關前,杜神牛給了他乙個測試 杜神牛造了n 個區域,他們緊鄰著排成一行,編號 1 n 在每個區域裡都放著一把 oi 界的密鑰匙,每一把都有一定的價值,lyd 當然想得到他們了。然而杜神牛規定 lyd 不能一下子把他們全部拿走,而...
題解 分離與合體 Loj10151
傳送門 分離與合體 loj10151 給定乙個長度為 n 的序列,如果從某個點 k 處將區間 l,r 斷開,劃分為 l,k 和 k 1,r 可以得到 a k a l a r 的分數,要求最後要把區間劃分到無法再分為止 即長度全為 1 並按照分離時間從前到後,區間從左到右的順序輸出所有劃分點 k 樣例...
一本通1573分離與合體
時間限制 1000 ms 記憶體限制 524288 kb 題目描述 經過在機房裡數日的切磋,lyd 從杜神牛那裡學會了分離與合體,出關前,杜神牛給了他乙個測試 杜神牛造了 n 個區域,他們緊鄰著排成一行,編號 1.n。在每個區域裡都放著一把 oi 界的密鑰匙,每一把都有一定的價值,lyd 當然想得到...