Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 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. int letters = __builtin_popcount(mask);
  11. if (K+picked-letters > N) return 0;
  12. if (dp[mask][picked] != -1) return dp[mask][picked];
  13. long long ans = 0;
  14. if (picked == K) return 1;
  15. ans += ((N-K-(picked-letters))*1LL*solve(mask, picked+1))%1000000007;
  16. ans %= 1000000007;
  17. for (int i = 1; i < (1 << K); i<<=1) {
  18. if ((i & mask) == 0) {
  19. if (picked) if ((1<<(picked)) == i) continue;
  20. ans += solve(mask^i, picked+1)%10000000007;
  21. ans %= 1000000007;
  22. }
  23. }
  24. return dp[mask][picked] = ans % 1000000007;
  25. }
  26. public:
  27. int howMany(int, int);
  28. };
  29.  
  30. int CarelessSecretary::howMany(int _N, int _K) {
  31. N=_N;
  32. K=_K;
  33. memset(dp, -1, sizeof dp);
  34. return solve(0,0);
  35. }
  36.  
  37. <%:testing-code%>
  38. //Powered by [KawigiEdit] 2.0!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement