DP overview

Revision en2, by THE_THUNDERSTORM_BEGINS, 2025-09-23 02:10:17

this blog will talk about the info needed to solve DP problems in general.

DP or dynamic programming is a method used to solve bigger problems be dividing them in some way

however while learning DP i recommend being similar with some data structures , sometimes we might just need a set or a map but at expert level i recommend being familiar with segment tree data structure.

this blog will be divided into phases where i explain some basic DP problems or explain some DP method in general.

each phase will contain codes and examples , you can ask more questions in comments.

Overview

1.


1.Fibonacci ------------------

sorry for this i really know this is what people tend to explain when doing DP but hear me out

the standard Fibonacci function looked something like this

int f(int n){
   if(n<1)return 0;
   return f(n-1)+f(n-2);
}

thinking about the complexity of this code , it appears that if takes O(f(n)) time complexity.

you should know that f(40)=102334155 so we may not be able to compute f(50) or anything greater with this function!.

or.. can we do something to make this even faster?

note that computing f(i) will call f(i-1) and f(i-2) but then calling f(i-1) will also call f(i-2) , so here is the catch , lets change our function so that whenever we are computing f(n) for a second time we return the previously computed answer, something like so

int mem[N],vis[N];
int f(int n){
    if(n<1)return 0;
    if(n==1)return 1;
    if(vis[n])return mem[n];
    vis[n]=1;
    return mem[n]=f(n-1)+f(n-2);
}

what is the complexity now? , turns out it is O(N) as we may compute each item at most once and the rest will be returned in O(1).

this is the trick behind (some) DP methods , but knowing this method we will jump into some actual problems that use it.

Frog 1

no comment needed , you may just observe how similar this is to Fibonacci (or you might just jump to solve it directly).

the solution ~~~~~ Your code here... ~~~~~

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en18 English THE_THUNDERSTORM_BEGINS 2025-09-24 02:41:46 2 Tiny change: ' $dp[W][2^100]$ (just k' -> ' $dp[W][2^{100}]$ (just k'
en17 English THE_THUNDERSTORM_BEGINS 2025-09-24 02:38:34 196 (published)
en16 English THE_THUNDERSTORM_BEGINS 2025-09-24 02:00:14 2760
en15 English THE_THUNDERSTORM_BEGINS 2025-09-24 01:31:55 1379 Tiny change: '</spoiler>' -> '</spoiler>\n\n\n'
en14 English THE_THUNDERSTORM_BEGINS 2025-09-24 01:13:10 2199 Tiny change: ' answer.\n\n$$\ndp[L' -> ' answer.\n$$\ndp[i][i]=0\n$$\n$$\ndp[L'
en13 English THE_THUNDERSTORM_BEGINS 2025-09-24 00:30:08 2149
en12 English THE_THUNDERSTORM_BEGINS 2025-09-23 18:22:08 2425 Tiny change: 'c3])\n$$\n$$\n+\frac' -> 'c3])\n$$\n $$\n+\frac'
en11 English THE_THUNDERSTORM_BEGINS 2025-09-23 17:49:26 2593
en10 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:48:42 56
en9 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:39:19 10
en8 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:38:22 600
en7 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:26:18 27
en6 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:25:43 2373
en5 English THE_THUNDERSTORM_BEGINS 2025-09-23 03:02:28 2810
en4 English THE_THUNDERSTORM_BEGINS 2025-09-23 02:32:47 1458 Tiny change: 'oiler>\n\n\n' -> 'oiler>\n\nyour task is now to try and solve \n\n\n'
en3 English THE_THUNDERSTORM_BEGINS 2025-09-23 02:18:44 680
en2 English THE_THUNDERSTORM_BEGINS 2025-09-23 02:10:17 1413 Tiny change: 'ike this\n```\nint' -> 'ike this\n\n```\nint'
en1 English THE_THUNDERSTORM_BEGINS 2025-09-23 01:54:07 817 Initial revision (saved to drafts)