Click
Here to go back to the homepage.
The Mailbox Manufacturers Problem Solution:
#include <bits/stdc++.h>
using namespace std;
int memo[11][100][100] = {0};
int solve(int k, int start, int end){
if(k == 0){
return INT_MAX;
}
if(k == 1){
return (end * (end + 1) / 2 - (start * (start + 1) / 2));
}
if(start == end){
return 0;
}
if(memo[k][start][end] == 0){
int result = INT_MAX;
for(int i = start + 1; i <= end; i++){
result = min(result, i + max(solve(k-1, start, i-1), solve(k, i, end)));
}
memo[k][start][end] = result;
}
return memo[k][start][end];
}
int main(){
// #ifndef TESTING
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
// #endif
int nCases;
cin >> nCases;
while(nCases--){
int mailboxes, firecrackers;
cin >> mailboxes >> firecrackers;
cout << solve(mailboxes, 0, firecrackers) << endl;
}
return 0;
}