刪數 dp區間型動態規劃

2021-07-15 14:36:11 字數 838 閱讀 2297

有n個不同的正整數數x1, x2, ... xn 排成一排,我們可以從左邊或右邊去掉連續的i個數(只能從兩邊刪除數),1<=i<=n,剩下n-i個數,再把剩下的數按以上操作處理,直到所有的數都被刪除為止。 每次操作都有乙個操作價值,比如現在要刪除從i位置到k位置上的所有的數。操作價值為|xi – xk|*(k-i+1),如果只去掉乙個數,操作價值為這個數的值。 任務:怎樣操作,使得刪完所有的數之後,得到的價值總和最大。

第一行為乙個正整數n,第二行有n個用空格隔開的n個不同的正整數。 3<=n<=100,n個運算元為1..1000 之間的整數。

輸出檔案remove.out 包含乙個正整數,為操作的最大值

654 29 196 21 133 118

768和前幾道題基本是一樣的參考一下前幾道題就可以.

1.石子合併

2.沙子合併

3.能量項鍊

f[i]j]表示的是從i開始刪除j個數得到的最大值,k表示刪除k個數,用k把區間化成兩部分,這裡題目是用的端點,需要做一下轉換。還是f[i][j]=max;

**

#include#includeusing namespace std;

int f[110][110];

int a[110];

int main()

for(j=2;j<=n;++j)//從i開始刪掉長度為j個數

//分開刪

for(int k=1;k}

}printf("%d",f[1][n]);

return 0;

}

區間型動態規劃

給定乙個序列 字串,進行一些操作 最後一步將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i j 時的最優性質 667.最長的回文序列 中文english 給一字串 s,找出在 s 中的最長回文子串行的長度.你可以假設 s 的最大長度為 1000.exa...

動態規劃 區間型

概述 最長的回文序列 取數是否必勝 給定乙個序列 字串,進行一些操作,最後一步會將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i,j 時的最優性質 1.題目描述 1.給定乙個字串s,長度是n,找到它最長的回文子串行的長度 例子 輸入 bbbab 輸出 ...

區間型動態規劃總結

區間型動態規劃,都是dp i j 由小的區間先計算,然後計算大的區間得到,模板就是 for int len 2 len n len int n s.length int dp new int n n int maxlen 0 for int i 0 i n i char ss s.tochararr...