動態規劃2石子合併

2021-09-26 10:34:02 字數 861 閱讀 9837

題目描述如下:

解析:;

1.因為只能取相鄰然後考慮又是乙個環這又是環上dp;

所以我們首先破環成鏈,列舉兩倍n可得所有情況。

2.仔細看一下又有點像合併果子,所以我們不難想到區間動規既然是區間動規那麼就考慮先把大區間分成各個小區間然後再將小區間合併,合併考慮將各個小區間的值相加再加上合併的代價,並且列舉分界線。

動態轉移方程為

f1[i][j]=max(f1[i][j],f1[i][k]+f1[k+1][j]+tot(i,j));

f2[i][j]=min(f2[i][j],f2[i][k]+f2[k+1][j]+tot(i,j));

3.最後我們再列舉哪種情況破環成鏈可取得最大值以及最小值。

**如下:

#includeusing namespace std;

int s[505];

int num[505];

int f1[505][505];

int f2[505][505];

int tot(int i,int j)

int main()

for(int i=1;i<=n;i++)

for(int p=1;p

for(int i=1,j=i+p;i<=n+n,j<=n+n;i++,j++)

}int maxn=0;

int minn=0x3f3f3f3f;

for(int i=1;i<=n;i++)

cout<

return 0;

}

282 石子合併

設有n堆石子排成一排,其編號為1,2,3,n。每堆石子有一定的質量,可以用乙個整數來描述,現在要將這n堆石子合併成為一堆。每次只能合併相鄰的兩堆,合併的代價為這兩堆石子的質量之和,合併後與這兩堆石子相鄰的石子將和新堆相鄰,合併時由於選擇的順序不同,合併的總代價也不相同。例如有4堆石子分別為 1 3 ...

2298 石子合併

2008年省隊選拔賽山東 時間限制 1 s 空間限制 256000 kb 題目等級 gold 在乙個操場上擺放著一排n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分。輸入描...

nyoj 737 石子合併(一)(動態規劃)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 有n堆石子排成一排,每堆石子有一定的數量。現要將n堆石子並成為一堆。合併的過程只能每次將相鄰的兩堆石子堆成一堆,每次合併花費的代價為這兩堆石子的和,經過n 1次合併後成為一堆。求出總的代價最小值。輸入有多組測試資料,輸入到檔案結...