fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll int
  6. #define ull unsigned ll
  7. #define ld long double
  8. typedef vector<int> vi;
  9. typedef multiset<int> mi;
  10. typedef multiset<ll> mll;
  11. typedef vector<ll> vll;
  12. typedef vector<bool> vb;
  13. typedef vector<string> vs;
  14. typedef set<ll> sll;
  15. typedef vector<vector<int>> _2vi;
  16. typedef vector<vector<ll>> _2vll;
  17. #define all(v) ((v).begin()), ((v).end())
  18. #define sz(v) ((ll)((v).size()))
  19.  
  20. #define vinp(v, n) \
  21.   for (ull i = 0; i < (n); i++) \
  22.   cin >> (v)[i]
  23. #define printv(v) \
  24.   for (auto i : (v)) \
  25.   cout << i << " "
  26. #define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
  27. #define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
  28. #define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
  29. #define _CRT_SECURE_NO_WARNING
  30. const ll MOD = 1000000007;
  31.  
  32. void Bustany() {
  33. ios_base::sync_with_stdio(false);
  34. cin.tie(NULL);
  35. cout.tie(NULL);
  36. #ifndef ONLINE_JUDGE
  37. freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
  38. #endif
  39. }
  40.  
  41. const ll N = 20;
  42. ll dp[N][(1LL << 20)];
  43. vector<vector<ll>> v(N, vector<ll>(N, 0));
  44. vector<vector<bool>> fob(N, vector<bool>(N, 0));
  45.  
  46. ll n, k;
  47.  
  48. ll rec(ll row, ll mask) {
  49. if (row == n) {
  50. if (__builtin_popcount(mask) == k) {
  51. return 0;
  52. }
  53. return -1e9;
  54. }
  55. auto &res = dp[row][mask];
  56. if (~res)return res;
  57. res = -1e9;
  58. res = max(res, rec(row + 1, mask));
  59. for (ll i = 0; i < n; i++) {
  60. if (((1LL << i) & mask) == 0 && !fob[row][i]) {
  61. res = max(res, v[row][i] + rec(row + 1, mask | (1LL << i)));
  62. }
  63. }
  64. return res;
  65. }
  66.  
  67. void solve() {
  68. cin >> n >> k;
  69. v.assign(n, vll(n, 0));
  70. fob.assign(n, vb(n, 0));
  71. for (ll i = 0; i < n; i++) {
  72. for (ll j = 0; j < n; j++) {
  73. cin >> v[i][j];
  74. }
  75. }
  76. ll m;
  77. cin >> m;
  78. memset(dp, -1, sizeof dp);
  79. while (m--) {
  80. ll x, y;
  81. cin >> x >> y;
  82. fob[x - 1][y - 1] = 1;
  83. }
  84. ll res = rec(0, 0);
  85. if (res < 0)cout << -1 << endl;
  86. else cout << res << endl;
  87. }
  88.  
  89. int main() {
  90. Bustany();
  91. ll t = 1;
  92. cin >> t;
  93. while (t--) {
  94. solve();
  95. }
  96. }
Success #stdin #stdout 0.02s 85380KB
stdin
Standard input is empty
stdout
0