I'm 13 years old and learning dynamic programming to improve my problem-solving abilities. Could someone please help me solve this problem? It has a dp kinda vibe, I learned how to memoize it, but I feel like I am not able to write the transition function, or the recursion statement in this properly. Can someone help me with my approach I have some mistake still Link: https://mirror.codeforces.com/contest/1343/problem/C
void solve(vector<ll>&a,ll idx,ll &maxSum,ll &sum,ll flag)
{
if(idx == a.size()){
maxSum = max(maxSum,sum);
return ;
}
if(a[idx] < 0 && flag == 1)
{
sum += a[idx];
solve(a,idx+1,maxSum,sum,0);
sum -= a[idx];
solve(a,idx+1,maxSum,sum,1);
}
else if(a[idx] > 0 && flag == 0)
{
sum += a[idx];
solve(a,idx+1,maxSum,sum,1);
sum -= a[idx];
solve(a,idx+1,maxSum,sum,0);
}
}
void solve(){
ll n;
cin >> n;
vt<ll> a(n);
cin >> a;
ll sum = 0,maxSum = -1e9;
solve(a,0,maxSum,sum,0);
solve(a,0,maxSum,sum,1);
cout << maxSum << endl;
}
When you overthinking in cp:
It is just a greddy problem you don't necessarily need dp to solve the problem. Div2 abc are generally greedy,implementation,math problems.Just be good at problem solving by practicing more problems.
Ohh,thank you. Got it.
Even if you fixed the bugs in your solution, I'm quite sure it would be too slow. I don't think this problem is solvable with dp, at least not with a dp similar to yours. If you want to get better at problem-solving, you should try different techniques and not try to force dp just because the problem "has a dp kinda vibe". Reading this might be helpful: https://mirror.codeforces.com/blog/entry/106346
Thanks for the reply.I will try for a better approach.