首先易知项链是个环因此:

for (int i = 1; i <= n; i++) {
        cin >> arr[i];
        arr[n + i] = arr[i];
 }

本题主要是将小区间化成大区间

当区间内只有两个珠子是,最大力量为ai×ai+1a_i\times a_{i+1}

而当区间内有三个珠子时,最大力量则为max(ai×ai+1,ai+1×ai+2)\max(a_i\times a_{i+1}, a_{i +1}\times a_{i + 2})

因此状态转移方程就是:

f(i,j)=max(f(i,j),f(j,k)+f(k+1,i)+aj×ak+1×ai+1)f(i,j) = \max(f(i, j), f(j, k)+f(k + 1, i) + a_{j}\times a_{k + 1}\times a_{i + 1})

最后取最大值然后写代码就行了