SSL P1597 石子合併問題

2021-08-13 16:00:37 字數 890 閱讀 3709

求在乙個圓圈中,合併所有石堆為一堆,其最大or最小的值。

因為是在乙個圓圈內,所以一頭與一尾也可以合併,且合併一次,都要再模擬一次圓圈,十分麻煩,所以我用乙個2*n的陣列,將每個石堆的得分複製到其+n的位置上,然後我們就可以

為所欲為

像普通石子合併一樣,求出每段(i

~i+n)的最大和最小值,最後再將其彙總並統計,輸出。

maxf=max(maxf,f[i][j]+f[j+1][k]+s[k]-s[i-1])

#include#include#include#define ll long long

using namespace std;

inline ll read()

while(s>='0'&&s<='9')

return d*f;

}void write(int x)

int min(int x,int y)

int f[201][201],l[201][201],s[201];

int main()

{ int a[201],n,m;

n=read();

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

a[i]=read(),a[i+n]=a[i];//複製

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

s[i]=s[i-1]+a[i];//預處理,不多bb

for(int i=2;i<=n;i++)//列舉每小段的長度

for(int j=1;j<=n*2-i+1;j++)//列舉出開頭位置

{int minf=2147483647,maxf=0,k=i+j-1;

for(int ij=j;ij

SSL P1597 石子合併問題 題目

石子合併問題 time limit 1000ms memory limit 65536k total submit 172 accepted 75 description 在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石...

SSL 1597 石子合併問題

description 在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。程式設計任務 對於給定n堆石子,程式設計計算合併成一堆的最...

SSLOJ1597 P1880 石子合併

在乙個圓形操場的四周擺放著n 堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2 堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。試設計乙個演算法,計算出將n堆石子合併成一堆的最小得分和最大得分。程式設計任務 對於給定n堆石子,程式設計計算合併成一堆的最小得分和最大得分。輸入包...