I’m just starting to learn programming and I was solving the problem whose code is NOKIA for practice. I’ve coded a solution which is almost the same as the editorial for that problem.
#include <iostream>
#include <limits.h>
#include <vector>
#include <set>
using namespace std;
static bool DEBUG = false;
int GIF(double num){ return (num-(int)num)>0.0000?(num+1):num;}
int main()
{
int cases, n, m, wastedWire, tmp = 0;
cin>>cases;
while(cases--)
{
cin>>n>>m;
vector<set<int> > dp(n + 1);
dp[0].insert(0);
dp[1].insert(2);
dp[2].insert(5);
wastedWire = INT_MAX;
for(int i = 3; i <= n; ++i)
{
if(DEBUG)
cout<<"For "<<i<<" slots"<<endl;
int limit = GIF(i/2.0);
for(int j = 1; j <= limit; ++j)
{
tmp = j + (i - j) + 1;
for(set<int>::iterator k = dp[j - 1].begin(); k != dp[j - 1].end(); ++k)
{
for(set<int>::iterator l = dp[i - j].begin(); l != dp[i - j].end(); ++l)
{
if(DEBUG)
cout<<(tmp + *k + *l)<<endl;
dp[i].insert(tmp + *k + *l);
}
}
}
}
for(set<int>::iterator i = dp[n].begin(); i != dp[n].end(); ++i)
{
if(wastedWire > (m - *i))
wastedWire = m - *i;
}
if(wastedWire >= 0)
cout<<wastedWire<<endl;
else
cout<<-1<<endl;
}
}
This solution is wrong and I can’t figure out why. Can anyone help or point me in the right direction? Any help is appreciated because I’ve already pushed myself quite a bit to solve this problem and I can’t think anymore