Pagini recente » Cod sursa (job #1891338) | Cod sursa (job #451973) | Cod sursa (job #338245) | Cod sursa (job #2696281) | Cod sursa (job #3251442)
#include <fstream>
using namespace std;
ifstream f("podm.in");
ofstream g("podm.out");
int n,i,j,k;
long long d[501],dp[501][501];
// dp[i][j] = numărul MINIM înmulțiri scalare cu codare, poate fi calculat produsul
// matriceal M_i * M_i+1 * ... * M_j
// Cazul de bază 2: matrice d[i - 1] x d[i] înmulțită cu matrice d[i] x d[i + 1]
// (matrice pe poziții consecutive)
int main()
{
f>>n;
for(i=0;i<=n;++i) f>>d[i];
for(i=1;i<n;++i)
for(j=i+1;j<=n;++j)
{
dp[j-i][j]=1LL<<60;
for(k=j-i;k<j;++k)
dp[j-i][j]=min(dp[j-i][j],dp[j-i][k]+dp[k+1][j]+d[j-i-1]*d[k]*d[j]);
}
// Rezultatul se află în dp[1][n]: Numărul MINIM de inmultiri scalare
// pe care trebuie să le facem pentru a obține produsul M_1 * ... * M_n
g<<dp[1][n];
return 0;
}