So in this [problem](http://codeforces.com/problemset/problem/431/C) i am trying to solve it using dynamic programming approach. But I am unable to understand the solution since its written in poor english. I am referring to this [tutorial](http://codeforces.com/blog/entry/12369). How is the dp[][] being developed?. it will be great if someone could explain in details since i am a newbie. Thank you in advance!↵
↵
↵
~~~~~↵
#include <iostream>↵
#include <stdio.h>↵
#include <algorithm>↵
↵
using namespace std;↵
↵
const int mod = 1e9 + 7;↵
↵
int dp[100][2];↵
↵
void add(int &a, int b)↵
{↵
a += b;↵
if(a >= mod)↵
a -= mod;↵
}↵
↵
int main(int argc, char ** argv)↵
{↵
int n, k, d;↵
cin >> n >> k >> d;↵
dp[0][0] = 1;↵
dp[0][1] = 0;↵
↵
for(int i = 1 ; i <= n ; ++i)↵
{↵
dp[i][0] = dp[i][1] = 0;↵
↵
for(int j = 1 ; j <= k ; ++j)↵
{↵
if(i-j < 0) break;↵
↵
if(j < d)↵
{↵
add(dp[i][0], dp[i-j][0]);↵
add(dp[i][1], dp[i-j][1]);↵
}↵
else↵
{↵
add(dp[i][1], dp[i-j][0]);↵
add(dp[i][1], dp[i-j][1]);↵
}↵
}↵
}↵
cout << dp[n][1] << "\n";↵
return 0;↵
}↵
~~~~~↵
↵
↵
↵
↵
~~~~~↵
#include <iostream>↵
#include <stdio.h>↵
#include <algorithm>↵
↵
using namespace std;↵
↵
const int mod = 1e9 + 7;↵
↵
int dp[100][2];↵
↵
void add(int &a, int b)↵
{↵
a += b;↵
if(a >= mod)↵
a -= mod;↵
}↵
↵
int main(int argc, char ** argv)↵
{↵
int n, k, d;↵
cin >> n >> k >> d;↵
dp[0][0] = 1;↵
dp[0][1] = 0;↵
↵
for(int i = 1 ; i <= n ; ++i)↵
{↵
dp[i][0] = dp[i][1] = 0;↵
↵
for(int j = 1 ; j <= k ; ++j)↵
{↵
if(i-j < 0) break;↵
↵
if(j < d)↵
{↵
add(dp[i][0], dp[i-j][0]);↵
add(dp[i][1], dp[i-j][1]);↵
}↵
else↵
{↵
add(dp[i][1], dp[i-j][0]);↵
add(dp[i][1], dp[i-j][1]);↵
}↵
}↵
}↵
cout << dp[n][1] << "\n";↵
return 0;↵
}↵
~~~~~↵
↵
↵