Advertisement
shamiul93

1122 - Digit Count.cpp

Oct 17th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. /**
  2. @author - Rumman BUET CSE'15
  3. Problem -   1122 - Digit Count
  4. Topic- DP
  5. */
  6.  
  7. // LightOJ always needs this format for sure..so I made a copy of it...
  8. #include <bits/stdc++.h>
  9. #include<vector>
  10. #define ll                                      long long int
  11. #define fi                                      freopen("in.txt", "r", stdin)
  12. #define fo                                      freopen("out.txt", "w", stdout)
  13. #define m0(a) memset(a , 0 , sizeof(a))
  14. #define m1(a) memset(a , -1 , sizeof(a))
  15. #define inf LLONG_MAX
  16. #define min3(a,b,c) min(a,min(b,c))
  17. #define max3(a,b,c) max(a,max(b,c))
  18. #define ones(mask)  __builtin_popcount(mask) /// __builtin_popcount : it's a built in function of GCC. Finds out the numbers of 1 in binary representation.
  19. #define mx 150000
  20.  
  21. using namespace std;
  22.  
  23. ll m, n ;
  24. ll arr[20] = {} ;
  25. ll dp[20][20][20] = {} ;
  26.  
  27. //ll m , n ;
  28.  
  29. ll solve(ll pos , ll digitTillNow , ll prevDigit)
  30. {
  31.  
  32.  
  33.     if(digitTillNow > n) return 0 ;
  34.  
  35.     if(abs(arr[pos] - prevDigit) > 2) return 0 ;
  36.     if(digitTillNow == n && abs(arr[pos] - prevDigit) <= 2) return 1 ;
  37.  
  38.     if(dp[pos][digitTillNow][prevDigit] != -1) return dp[pos][digitTillNow][prevDigit] ;
  39.  
  40.  
  41.     ll ret = 0 ;
  42.  
  43.     for(ll i = 0 ; i < m ; i++)
  44.     {
  45.         ret += solve(i , digitTillNow + 1 , arr[pos]) ;
  46.     }
  47.  
  48.     return dp[pos][digitTillNow][prevDigit] = ret ;
  49. }
  50.  
  51. int main()
  52. {
  53. //    fi ;
  54.     ll T, t = 0 ;
  55.     scanf("%lld",&T) ;
  56.  
  57.     while(T--)
  58.     {
  59.         t++ ;
  60.         m1(dp) ;
  61.  
  62.         scanf("%lld %lld",&m, &n) ;
  63.  
  64.         for(ll i = 0 ; i < m ; i++)
  65.         {
  66.             scanf("%lld",&arr[i]) ;
  67.         }
  68.  
  69.         ll ans = 0 ;
  70.  
  71.         for(ll i = 0 ; i < m ; i++)
  72.         {
  73.             m1(dp);
  74.           ans += solve(i , 1 , arr[i]) ;
  75.         }
  76.  
  77. //        ll ans = solve(0 , 0 , arr[0]) ;
  78.  
  79.         printf("Case %lld: ",t) ;
  80.         printf("%lld\n",ans) ;
  81.     }
  82.     return 0 ;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement