Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.85 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. class CarelessSecretary {
  6. private:
  7. int dp[10010][14];
  8. int N, K;
  9. int solve(int mask, int picked) {
  10. if (dp[mask][picked] != -1) return dp[mask][picked];
  11. long long ans = 0;
  12. if (picked == K) return 1;
  13. int letters = __builtin_popcount(mask);
  14. ans += (max(0,N-K-(picked-letters))*1LL*solve(mask, picked+1))%1000000007;
  15. ans %= 1000000007;
  16. for (int i = 1; i < (1 << K); i<<=1) {
  17. if ((i & mask) == 0) {
  18. if (picked) if ((1<<(picked)) == i) continue;
  19. ans += solve(mask^i, picked+1)%10000000007;
  20. ans %= 1000000007;
  21. }
  22. }
  23. return dp[mask][picked] = ans % 1000000007;
  24. }
  25. public:
  26. int howMany(int, int);
  27. };
  28.  
  29. int CarelessSecretary::howMany(int _N, int _K) {
  30. N=_N;
  31. K=_K;
  32. memset(dp, -1, sizeof dp);
  33. return solve(0,0);
  34. }
  35.  
  36. <%:testing-code%>
  37. //Powered by [KawigiEdit] 2.0!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement