Cod sursa(job #1643778)
| Utilizator | Data | 9 martie 2016 20:13:49 | |
|---|---|---|---|
| Problema | Parantezare optima de matrici | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.64 kb |
# include <fstream>
using namespace std;
ifstream fin ("podm.in");
ofstream fout ("podm.out");
long long DP[505][505];
int main()
{
int n;
long long d[505];
fin>>n;
for (int i=1; i<=n+1; i++)
fin>>d[i];
for (int i=1; i<=n-1; i++)
DP[i][i+1]=d[i]*d[i+1]*d[i+2];
for (int k=2; k<=n-1; k++)
for (int i=1; i<=n-k; i++)
{
long long Min=1LL<<62;
for (int j=i; j<=i+k-1; j++)
{
Min=min(Min, DP[i][j]+DP[j+1][i+k]+d[i]*d[j+1]*d[i+k+1]);
}
DP[i][i+k]=Min;
}
fout<<DP[1][n];
return 0;
}
