Pagini recente » Cod sursa (job #3042064) | Cod sursa (job #945518) | Cod sursa (job #2179966) | Cod sursa (job #1683333) | Cod sursa (job #1489354)
#include <iostream>
#include <algorithm>
#include <cmath>
#define double long double
#define lint long long int
using namespace std;
const int eps = 1e-8l;
class System {
public:
static const int NMAX = 205;
int n;
double mat[NMAX][NMAX];
double c[NMAX];
int b_max;
inline void GaussJordan () {
int lin;
for (int col = 1; col < n; ++ col) {
for (lin = col; lin < n; ++ lin) {
if (fabs(mat[lin][col]) >= eps) {
_swap(col, lin);
break;
}
}
scale(col, mat[col][col]);
for (lin = col + 1; lin < n; ++ lin)
subtract(lin, mat[lin][col], col);
}
for (int col = n - 1; col; -- col)
for (lin = col - 1; lin; -- lin)
subtract(lin, mat[lin][col], col);
}
inline void solve () {
int i;
double x;
lint ans = -1;
lint total_c;
for (int xn = 0; xn <= b_max; ++ xn) {
cout << "il incerc pe xn " << xn << endl;
total_c = xn * c[n];
for (i = n - 1; i; -- i) { //Variabila curenta
x = mat[i][n + 1] - xn * mat[i][n]; //Valoarea variabilei curente
if (x <= -eps || fabs(x - round(x)) >= eps)
break;
total_c += round(x) * c[i];
}
if (!i && total_c > ans)
ans = total_c;
}
cout << ans << '\n';
}
inline void read () {
cin >> n;
//if (n == 1) { Ce facem aici? }
for (int i = 1; i <= n; ++ i)
cin >> c[i];
for (int i = 1; i < n; ++ i)
cin >> mat[i][n + 1];
b_max = -1;
for (int i = 1; i < n; ++ i)
if (mat[i][n + 1] > b_max)
b_max = mat[i][n + 1];
int j;
for (int i = 1; i < n; ++ i)
for (j = 1; j <= n; ++ j)
cin >> mat[i][j];
}
inline void print () {
cout << "Sistemul este:" << endl;
int j;
for (int i = 1; i < n; ++ i) {
for (j = 1; j <= n + 1; ++ j)
cout << mat[i][j] << ' ';
cout << '\n';
}
cout << endl;
}
private:
inline void _swap (int lin1, int lin2) {
for (int i = 1; i <= n + 1; ++ i)
swap(mat[lin1][i], mat[lin2][i]);
}
inline void scale (int lin, double alpha) {
for (int i = 1; i <= n + 1; ++ i)
mat[lin][i] /= alpha;
}
inline void subtract (int lin_dest, double alpha, int lin_source) {
for (int i = 1; i <= n + 1; ++ i)
mat[lin_dest][i] -= alpha * mat[lin_source][i];
}
};
int main()
{
ios_base :: sync_with_stdio(false);
int t = 1;
//cin >> t;
while (t --) {
System sis;
sis.read();
sis.GaussJordan();
cout << "Dupa Gauss" << endl;
sis.print();
sis.solve();
}
return 0;
}