Pagini recente » Cod sursa (job #1579400) | Cod sursa (job #1579250) | Cod sursa (job #2577462) | Cod sursa (job #2784738) | Cod sursa (job #673226)
Cod sursa(job #673226)
#include <fstream>
#define nmax 505
#define ll long long
using namespace std;
ll dp[nmax][nmax];
int n;
ll c[nmax+1];
ifstream f("podm.in");
ofstream g("podm.out");
void citeste(){
f>>n;
for(int i=0; i<=n; ++i) f>>c[i];
}
ll minim(ll x, ll y){
if (x < y ) return x;
return y;
}
void rezolva(){
for(int i=0; i<n; ++i)
dp[i][i+1] = c[i-1] * c[i] * c[i+1];
for(int nr=2; nr<=n; ++nr){//marimea intervalului [i,j]
for(int i=1; i+nr<=n; ++i){//capatul stang
int j=i+nr;//capatul drept
dp[i][j] = 1000000000000000000000LL;
for(int k=i; k<=j; ++k)//fixez taietura
dp[i][j] = minim(dp[i][j], dp[i][k]+dp[k+1][j]+c[i-1]*c[k]*c[j]);
}
}
}
void scrie(){
g<<dp[1][n];
}
int main(){
citeste();
rezolva();
scrie();
f.close();
g.close();
return 0;
}