LPSolver(const VVT &A, const VT &b, const VT &c) : m(b.size()), n(c.size()), N(n + 1), B(m), D(m + 2, VT(n + 2)) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) D[i][j] = A[i][j]; for (int i = 0; i < m; i++) { B[i] = n + i; D[i][n] = -1; D[i][n + 1] = b[i]; } for (int j = 0; j < n; j++) { N[j] = j; D[m][j] = -c[j]; } N[n] = -1; D[m + 1][n] = 1; }
set<VT> LCSall(VT& A, VT& B) { VVI dp; int n = A.size(), m = B.size(); dp.resize(n+1); for(int i=0; i<=n; i++) dp[i].resize(m+1, 0); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1]+1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } set<VT> res; backtrackall(dp, res, A, B, n, m); return res; }
void UG_LOG_Vector(const VT &vec) { for (size_t i=0; i<vec.size(); ++i) { UG_LOG( vec[i] << " "); } UG_LOG(std::endl); /*{ std::cerr << vec[i] << " "; } std::cerr << std::endl;*/ }
VT LCS(VT& A, VT& B) { VVI dp; int n = A.size(), m = B.size(); dp.resize(n+1); for(int i=0; i<=n; i++) dp[i].resize(m+1, 0); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) { if(A[i-1] == B[j-1]) dp[i][j] = dp[i-1][j-1]+1; else dp[i][j] = max(dp[i-1][j], dp[i][j-1]); } VT res; backtrack(dp, res, A, B, n, m); reverse(res.begin(), res.end()); return res; }
void gemv_generic (typename MT::value_type alpha, MT const & A, VT const & X, typename MT::value_type beta, VTOut & C) { //std::cerr << "gemm: generic call "<< std::endl ; // first resize if necessary and possible resize_or_check_if_view(C,make_shape(first_dim(A))); if (second_dim(A) != X.size()) TRIQS_RUNTIME_ERROR << "gemm generic : dimension mismatch "<< second_dim(A) << " vs " << X.size(); C() = 0; for (int i=0; i<first_dim(A); ++i) for (int k=0; k<second_dim(A); ++k) C(i) += A(i,k)*X(k); }
int main() { int m = 4, n = 3; T _A[m][n] = { {6, -1, 0}, {-1, -5, 0}, {1, 5, 1}, {-1, -5, -1} }; T _b[m] = {10, -4, 5, -3}; T _c[n] = {1, -1, 0}; VVT A(m); VT b(_b, _b + m); VT c(_c, _c + n); for (int i = 0; i < m; i++) A[i] = VT(_A[i], _A[i] + n); LPSolver solver(A, b, c); VT x; T value = solver.Solve(x); cout << "Value: " << value << "\n"; cout << "Solution:"; for (size_t i = 0; i < x.size(); i++) cout << " " << x[i]; cout << "\n"; return 0; }