Pagini recente » Cod sursa (job #588411) | Cod sursa (job #241015) | Cod sursa (job #586938) | Cod sursa (job #803374) | Cod sursa (job #3322319)
#include <iostream>
using namespace std;
typedef long long ll;
const ll mxN = 500, INF = 1e17;
//1. dp[st][dr] = nr minim de inmultiri pt A_st * ... A_dr
ll d[mxN+2], dp[mxN+1][mxN+1];
int main()
{
int n ;
cin >> n;
for(int i = 1;i<=n+1;i++)
cin >> d[i];
//2. Cazuri de baza
for(int i = 1;i<=n;i++)
for(int j = 1;j<=n;j++)
dp[i][j] = INF;
// len = 1
for(int i = 1;i<=n;i++)
dp[i][i] = 0;
// len = 2
for(int i = 1;i<n;i++)
dp[i][i+1] = d[i] * d[i+1] * d[i+2];
// 3. Tranzitii
for(int len = 3;len<=n;len++)
for(int dr = len;dr <= n;dr++)
{
int st = dr - len + 1;
for(int k = st;k<=dr-1;k++)
{
ll costK = dp[st][k] +
dp[k+1][dr] +
d[st] * d[k + 1] * d[dr+1];
dp[st][dr] = min(dp[st][dr], costK);
}
}
// 4. Raspuns
cout << dp[1][n] << '\n';
return 0;
}