Pagini recente » Cod sursa (job #1097869) | Cod sursa (job #1648703) | Cod sursa (job #2925925) | Clasament Summer Challenge 2009, Runda 3 | Cod sursa (job #369718)
Cod sursa(job #369718)
#include<stdio.h>
#define infile "podm.in"
#define outfile "podm.out"
#define nmax 513
long long dp[nmax][nmax]; //dp[i][j]=costul minim de a inmulti scalar intervalul [i,j]
int d[nmax]; //dimensiunile matricilor
int n; //numarul dematrici
inline long long min(long long a, long long b)
{
if(a<b) return a; return b;
}
void read()
{
int i;
scanf("%d\n",&n);
for(i=0;i<=n;i++)
scanf("%d",&d[i]);
}
void init()
{
int i;
for(i=1;i<n;i++)
dp[i][i+1]=d[i-1]*d[i]*d[i+1];
}
void solve()
{
int i,j,k,l;
for(i=2;i<=n;i++) //marimea intervalului
for(j=1;j+i<=n;j++) //capatul stang al intervalului
{
k=j+i; //capatul drept al intervalului
dp[j][k]=(long long)999999999999999; //initializam cu infinit
printf("%lld\n",dp[j][k]);
for(l=j;l<=k;l++) //selectam pozitia taierii
dp[j][k]=min(dp[j][k],dp[j][l]+dp[l+1][k] + d[j-1]*d[l]*d[k]);
}
}
void write()
{
printf("%lld\n",dp[1][n]);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
init();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}