求在乙個圓圈中,合併所有石堆為一堆,其最大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堆石子,程式設計計算合併成一堆的最小得分和最大得分。輸入包...