Pagini recente » Cod sursa (job #941611) | Cod sursa (job #1276222) | Cod sursa (job #1342786) | Cod sursa (job #465627) | Cod sursa (job #3288984)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
const ll inf = 1e18;
ll n,dp[505][505],d[505];
ll i,j,k;
ll a,b;
ll solve(ll L,ll R) {
if (dp[L][R] != -1)
return dp[L][R];
dp[L][R] = inf;
for (int k = L+1;k < R;k++){
if (dp[L][R] > solve(L,k) + solve(k,R) + d[L]*d[k]*d[R]){
dp[R][L] = k;
dp[L][R] = min(dp[L][R],solve(L,k) + solve(k,R) + d[L]*d[k]*d[R]);
}
}
return dp[L][R];
}
ll parantezare(ll L,ll R) {
if (L == R-1)
cout << "[" << d[L] << "," << d[R] << "]";
else {
cout << "(";
parantezare(L,dp[R][L]);
parantezare(dp[R][L],R);
cout << ")";
}
}
int main()
{
fin >> n;
for (i = 1;i <= n+1;i++)
fin >> d[i];
for (i = 1;i <= n+1;i++)
for (j = 1;j <= n+1;j++)
dp[i][j] = -1;
for (i = 1;i <= n;i++)
dp[i][i+1] = 0;
fout << solve(1,n+1);
parantezare(1,n+1);
return 0;
}