Submission
Status:
[TSSSSSSSSS]
Score: 0
User: Nightingale
Problemset: 02.Forbidden Boss Room
Language: cpp
Time: 1.083 second
Submitted On: 2025-04-01 15:16:41
#include <bits/stdc++.h>
#define int long long
using namespace std;
int b, c;
unordered_map<string, int> memo; // Memoization table
// Generate a unique key based on current state
string getKey(vector<int> &level, int day, int sum) {
string key = to_string(day) + "_" + to_string(sum) + "_";
for (int x : level) key += to_string(x) + ",";
return key;
}
int dyna(vector<int> &level, int day, int sum) {
if (day == b) return sum % c;
string key = getKey(level, day, sum);
if (memo.find(key) != memo.end()) return memo[key];
int maxVal = LLONG_MIN;
for (int i = 0; i < level.size(); i++) {
vector<int> mem = level;
int power = (sum + level[i]) % c;
if (power == 0) power = -1;
mem.erase(mem.begin() + i);
maxVal = max(maxVal, dyna(mem, day + 1, power));
}
return memo[key] = maxVal; // Store result in memo
}
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int a;
cin >> a;
while (a--) {
cin >> b >> c;
vector<int> level(b);
for (int j = 0; j < b; j++) cin >> level[j];
memo.clear(); // Reset memoization for each test case
cout << dyna(level, 1, 0) << '\n';
}
}