I was trying to solve this problem and from the comments section in the editorial, I was directed to the following solution :
#include <bits/stdc++.h>
using namespace std;
#define MAX(a,b,c) max(a,max(b,c))
int n,a,b,c,dp[4001];
int f(int x)
{
    if (x == 0) return 0;
    if (x < 0 || (x > 0 && x < a && x < b && x < c)) 
        return 0xACCE97ED;                              // <- **I have doubt here**
    if (!dp[x]) dp[x] = MAX(f(x-a),f(x-b),f(x-c)) + 1;
        return dp[x];
}
int main()
{
    cin >> n >> a >> b >> c;
    memset(dp,0,sizeof(dp));
    cout << f(n) << endl;
}
I wanted to know:
- What is the need of the if statement that returns - 0xACCE97EDfor the test case:- 4000 1 2 3. This test case dosen't work when that specific- ifstatement is missing.
- Why specifically - 0xACCE97EDis being returned? Because when I tried to return any other number (say 9999), then the output is- expected output + 9999.
 
     
     
     
    