fork download
  1. /*
  2. * Author: Geeza
  3. */
  4.  
  5. #include <bits/stdc++.h>
  6.  
  7. #define ld long double
  8. #define ll long long
  9. #define pb push_back
  10. #define fin(a, n) for(int i = a; i < n; i++)
  11. #define fjn(a, n) for(int j = a; j < n; j++)
  12. #define all(a) a.begin(),a.end()
  13. #define allr(a) a.rbegin(),a.rend()
  14. #define FAST ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
  15.  
  16. using namespace std;
  17.  
  18. const double PI = acos(-1);
  19. const int N = 105;
  20. const ll oo = 0x3f3f3f3f3f3f3f3f;
  21. const int mod = 1000000007, inf = 1e6;
  22.  
  23. string di[] = {"D","L", "U", "R", "UL", "UR", "DL", "DR"};
  24. int dx[] = {+1, +0, +0, -1, -1, -1, +1, +1};
  25. int dy[] = {+0, -1, +1, +0, -1, +1, -1, +1};
  26. char dc[] = {'D', 'L', 'R', 'U'};
  27.  
  28. ll n;
  29. vector<ll> v;
  30. ll pw3[N];
  31. vector<vector<ll>> dp;
  32.  
  33. ll get(ll mask, int d) {
  34. return (mask / pw3[d]) % 3;
  35. }
  36.  
  37. ll rec(int idx, ll mask) {
  38. if (idx == n) return 0;
  39.  
  40. ll &ret = dp[idx][mask];
  41. if (~ret) return ret;
  42.  
  43. ll ans = rec(idx+1, mask);
  44.  
  45. ll cnt[10] = {};
  46. ll cont = 0, tmp = v[idx];
  47. while (tmp) {
  48. cnt[tmp%10]++;
  49. tmp/=10;
  50. }
  51.  
  52. bool good = true;
  53.  
  54. for (int i = 0; i <= 9; i++) {
  55. if (cnt[i] > 2)
  56. good = false;
  57. }
  58.  
  59. if (good) {
  60. for (int i = 0; i <= 9; i++) {
  61. if (get(mask, i) + cnt[i] > 2)
  62. good = false;
  63. }
  64. }
  65.  
  66. if (good) {
  67. ll nwMask = mask;
  68. for (int i = 0; i <= 9; i++) {
  69. nwMask += cnt[i] * pw3[i];
  70. }
  71. ans = max(ans, rec(idx+1, nwMask) + v[idx]);
  72. }
  73. return ret = ans;
  74. }
  75.  
  76. void solve() {
  77. cin >> n;
  78. v.assign(n, 0);
  79. fin(0, n) cin >> v[i];
  80.  
  81. pw3[0] = 1;
  82. for (int i = 1; i <= 9; i++) pw3[i] = pw3[i-1]*3;
  83. ll mx = pw3[9] * 3;
  84. dp = vector<vector<ll>> (n, vector<ll>(mx, -1));
  85.  
  86. cout << rec(0, 0) << "\n";
  87. }
  88.  
  89. int main() {
  90. FAST;
  91. #ifndef ONLINE_JUDGE
  92. freopen("input.txt","r",stdin);
  93. freopen("output.txt","w",stdout);
  94. #endif
  95. int tt = 1; cin >> tt;
  96. while(tt--){
  97. solve();
  98. }
  99. return 0;
  100. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
0