Pagini recente » Cod sursa (job #974282) | Cod sursa (job #1222406) | Cod sursa (job #1547692) | Cod sursa (job #1774683) | Cod sursa (job #2096992)
#include <bits/stdc++.h>
#define MAX_N 500
#define sqrInf 999999999
using namespace std;
FILE *f, *g;
typedef long long lint;
int n;
lint a[MAX_N + 2];
lint dp[MAX_N + 1][MAX_N + 1];
lint inm[MAX_N + 1][MAX_N + 1];
void readFile()
{
f = fopen("podm.in", "r");
fscanf(f, "%d", &n);
int i;
for(i = 1; i <= n + 1; i ++)
fscanf(f, "%lld", &a[i]);
fclose(f);
}
void getInm()
{
int i, j;
for(i = 1; i <= n; i ++)
{
int l = a[i];
int c = a[i + 1];
for(j = i + 1; j <= n; j ++)
{
inm[i][j] = inm[i][j - 1] + l * c * a[j + 1];
c = a[j + 1];
}
}
}
void getDp()
{
int i, j, h;
for(i = 2; i <= n; i ++)
{
for(j = 1; j + i - 1 <= n; j ++)
{
int st = j;
int dr = j + i - 1;
dp[st][dr] = inm[st][dr];
for(h = st; h < dr; h ++)
dp[st][dr] = min(dp[st][dr], dp[st][h] +
dp[h + 1][dr] +
a[st] * a[h + 1] * a[dr + 1]);
}
}
}
void solve()
{
getInm();
getDp();
}
void printFile()
{
g = fopen("podm.out", "w");
fprintf(g, "%lld\n", dp[1][n]);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}