Pagini recente » Monitorul de evaluare | Cod sursa (job #1044031) | Cod sursa (job #825893) | Cod sursa (job #3134338) | Cod sursa (job #3340212)
#include <fstream>
#define int long long
using namespace std;
ifstream fin("podm.in");
ofstream fout("podm.out");
const int NMAX = 505;
int dp[NMAX][NMAX];
int arr[NMAX];
const int INF = 1e18;
signed main()
{
int n;
fin>>n;
for (int i=0;i<=n;i++) {
fin>>arr[i];
}
for (int i=1;i<n;i++) {
dp[i][i+1] = arr[i-1] * arr[i] * arr[i+1];
}
for (int lg=3;lg<=n;lg++) {
for (int l=1;l<=n-lg+1;l++) {
int r = l + lg - 1;
dp[l][r] = INF;
for (int k=l;k<r;k++) {
dp[l][r] = min(dp[l][r], dp[l][k] + dp[k+1][r] + arr[l-1] * arr[k] * arr[r]);
}
}
}
fout<<dp[1][n];
return 0;
}