Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <deque>
- #include <queue>
- #include <stack>
- #include <map>
- #include <algorithm>
- #include <set>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- #include <ctime>
- #include <fstream>
- #include <numeric>
- #include <limits.h>
- using namespace std;
- typedef vector<int> vi;
- typedef vector<string> vs;
- typedef pair<int,int> ii;
- typedef long long ll;
- #define ITE(v) typeof(v.begin())
- #define FOR(i,n) for(int i = 0; i < n; i++)
- #define FORIT(it,v) for(ITE(v) it = v.begin(); it != v.end(); it++)
- #define ALL(v) v.begin(), v.end()
- #define SZ(v) int(v.size())
- #define pb push_back
- #define SQR(a) ((a)*(a))
- #define INF 0x3f3f3f3f
- #define EPS (1e-9)
- inline int cmp(double a, double b = 0.0) {
- if (fabs(a-b) <= EPS) return 0;
- if (a < b) return -1;
- return 1;
- }
- #define MAX 7
- int n;
- int minf[MAX][MAX], maxf[MAX][MAX], cost[MAX][MAX];
- vi sol;
- int fs, cs;
- map<vi,int> m;
- int solve() {
- if (sol[0] == n-1) return 0;
- if (m.count(sol)) return m[sol];
- int &r = m[sol];
- r = -INF;
- int v = sol[0];
- int u = sol[1];
- if (u == n) {
- if (sol[v+2] > 0) return r = -INF;
- sol[0] = v+1;
- sol[1] = v+2;
- r = solve();
- sol[0] = v;
- sol[1] = n;
- return r;
- }
- if (sol[v+2] < minf[v][u]) return r = -INF;
- for (int i = minf[v][u]; i <= min(sol[v+2],maxf[v][u]); i++) {
- int c = i*i;
- if (i > 0) c += cost[v][u];
- sol[v+2] -= i;
- sol[1]++;
- sol[u+2] += i;
- int rs = solve();
- if (rs > -INF) r = max(r,rs+c);
- sol[1]--;
- sol[u+2] -= i;
- sol[v+2] += i;
- }
- return r;
- }
- int main() {
- fs = 100;
- cs = 0;
- sol = vi(8);
- cin >> n;
- FOR(i,n*(n-1)/2) {
- int s,f,l,h,a;
- cin >> s >> f >> l >> h >> a;
- s--;f--;
- minf[s][f] = l;
- maxf[s][f] = h;
- cost[s][f] = a;
- }
- for (int i = 0; i <= 25; i++) {
- sol[1] = 1;
- sol[2] = i;
- m.clear();
- int r = solve();
- if (r >= 0) {
- cout << i << " " << r << endl;
- return 0;
- }
- }
- cout << -1 << " " << -1 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement