Pagini recente » Cod sursa (job #989670) | Cod sursa (job #631751) | Cod sursa (job #2555306) | Cod sursa (job #605781) | Cod sursa (job #801947)
Cod sursa(job #801947)
#include <fstream>
#include <cstring>
#define NM 1010
#define INF 0x3f3f3f3f
#define PI pair<long long, long long>
#define L first
#define C second
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
long long DP[NM][NM];
int N,i;
PI DIM[NM];
int Solve (int P, int U)
{
if (DP[P][U]!=INF) return DP[P][U];
if (P==U)
{
DP[P][U]=0;
return DP[P][U];
}
if (P+1==U)
{
DP[P][U]=DIM[P].L*DIM[P].C*DIM[U].C;
return DP[P][U];
}
for (int i=P; i<U; i++)
DP[P][U]=min(DP[P][U],Solve(P,i)+Solve(i+1,U)+DIM[P].L*DIM[i].C*DIM[U].C);
return DP[P][U];
}
int CD[NM];
int main ()
{
f >> N;
for (i=1; i<=N+1; i++)
f >> CD[i];
for (i=1; i<=N; i++)
{
DIM[i].L=CD[i];
DIM[i].C=CD[i+1];
}
memset(DP,INF,sizeof(DP));
g << Solve(1,N) << '\n';
f.close();
g.close();
return 0;
}