The question is this.
The solution is something like this:
dp[1] = 1, dp[2] =3 ;
for(int i =3; i <= n ; i++) dp[i] = dp[i — 1] + dp[ i- 2] + 2;
How did one come with the formulation dp[i] = dp[ i — 1 ] + dp[i — 2] + 2 ?
Any help would be really appreciated.
Peace!
Its a result of this simple calculation... - we can write dp[i] as all the ways to select such that ith one is selected. So now we have
dp[i]=dp[i-1]+dp[i-3]+dp[i-5]....1 using the same rule we can write...2
dp[i-1]=dp[i-2]+dp[i-4]+....3 on adding these two... we see that
Result:dp[i]+dp[i-1]=dp[i-1]+dp[i-2]+dp[i-3]+...(all the ters upto 1). now dp[i] in eq 1 can also be written as
dp[i]=1+(1+dp[i-2]+dp[i-4]+.....)+dp[i-3]+dp[i-4]... which is dp[i]=2+dp[i-1]+dp[i-2]...from the above result.
I guess this proof suffices... you can also derive this by directly taking prefix sum in DP but this i guess is more understandable.
The one is added because we are not considering single element in all the previous DP's