Pagini recente » Cod sursa (job #2613984) | Borderou de evaluare (job #769926) | Cod sursa (job #880437)
Cod sursa(job #880437)
#include <fstream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
using namespace std;
class Parantezare
{
int N;
int sizes[55];
long long result[55][55];
public:
Parantezare(string inFile, string outFile)
{
read(inFile);
solve();
write(outFile);
}
private:
void read(string inFile)
{
ifstream fin(inFile);
fin >> N;
for (int i = 0; i <= N; ++i)
{
fin >> sizes[i];
}
fin.close();
}
void solve()
{
int i, k, l;
// Compute for length 1
for (i = 0; i < N; ++i)
{
result[1][i] = 0;
}
// Compute for bigger lengths
for (l = 2; l <= N; ++l)
{
for (i = 0; i <= N - l; ++i)
{
result[l][i] = numeric_limits<long long>::max();
for (k = 1; k < l; ++k)
{
result[l][i] = min(result[l][i],
(long long) result[k][i] + result[l - k][i + k] +
(long long) sizes[i] * sizes[i + k] * sizes[i + l]);
}
}
}
}
void write(string outFile)
{
ofstream fout(outFile);
fout << result[N][0];
fout.close();
}
};
int main()
{
Parantezare parantezare("podm.in", "podm.out");
}