和 2066思路基本一致
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
int dp[410][410], a[410], s[410];
int main(){
int n, ans;
double p;
while (scanf("%d%lf", &n, &p) ,n) {
for (int i = 1; i <= n; i++) {
scanf("%d", a+i);
a[i + n] = a[i];
}
for (int i = 1; i <= n * 2; i++) {
dp[i][i] = 0;
s[i] = s[i - 1] + a[i];
}
for (int len = 1; len < n; len++)
for (int i = 1; i + len <= n * 2; i++) {
int j = i + len;
dp[i][j] = INF;
for (int k = i; k < j; k++)
dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j] + max(s[k] - s[i - 1], s[j] - s[k]));
}
ans = INF;
for (int i = 1; i <= n; i++)
ans = min(ans, dp[i][i + n - 1]);
printf("%.2f\n", ans*p);
}
}