fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. public class Main {
  8.  
  9. static int modulo = 1000000007;
  10.  
  11. static int tileStackingProblem(int n, int m, int k) {
  12. int dp[][] = new int[n+1][m+1];
  13. int sum[][] = new int[n+1][m+1];
  14.  
  15. for(int i=0;i<=m;i++){
  16. dp[0][i]=1;
  17. sum[0][i]=1;
  18. }
  19.  
  20. //If we have n left but m is 0, this means it is not possible to stack any more tile,
  21. //thus setting it to 0
  22. for(int i=0;i<=n;i++){
  23. dp[i][0]=0;
  24. sum[i][0]=1;
  25. }
  26.  
  27. for(int j=1;j<=m;j++){
  28. for(int i=1;i<=n;i++){
  29. dp[i][j]=sum[i][j-1];
  30. if(i>k){
  31. dp[i][j] -= sum[i-k-1][j-1];
  32. if (dp[i][j] < 0)
  33. dp[i][j] += modulo;
  34. }
  35. }
  36.  
  37. for(int i=1;i<=n;i++){
  38. sum[i][j] = sum[i-1][j] + dp[i][j];
  39. sum[i][j] %= modulo;
  40. }
  41. }
  42. return dp[n][m];
  43. }
  44.  
  45. public static void main(String[] args) {
  46. Scanner in = new Scanner(System.in);
  47. int n = in.nextInt();
  48. int m = in.nextInt();
  49. int k = in.nextInt();
  50. int result = tileStackingProblem(n, m, k);
  51. System.out.println(result);
  52. in.close();
  53. }
  54. }
  55.  
Success #stdin #stdout 0.06s 4386816KB
stdin
3 3 2
stdout
7