比赛 动规 评测结果 AAAAAAAAAA
题目名称 安排公牛 最终得分 100
用户昵称 TARDIS 运行时间 0.149 s
代码语言 C++ 内存使用 24.29 MiB
提交时间 2017-06-18 22:12:08
显示代码纯文本
  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #define COGS
  5. using namespace std;
  6. const int maxn=21;
  7. typedef unsigned int uint;
  8. uint n,m,f[2][1<<maxn];
  9. uint s[maxn],cnt[1<<maxn],temp,temp2,num;
  10. inline void in(){
  11. #ifdef COGS
  12. freopen("examnine.in","r",stdin);
  13. freopen("examnine.out","w",stdout);
  14. #endif
  15. scanf("%d%d",&n,&m);num=(1<<m)-1;
  16. for (int i=1;i<=n;i++){
  17. scanf("%d",&temp);
  18. for (int j=1;j<=temp;j++){
  19. scanf("%d",&temp2);
  20. s[i]|=(1<<(m-temp2));
  21. }
  22. }
  23. }
  24. inline uint lowbit(uint x){
  25. return (x&-x);
  26. }
  27. inline void dp(){
  28. f[0][0]=1;
  29. for (uint i=1;i<=n;i++){
  30. for (uint j=0;j<=num;j++){
  31. if (f[i-1&1][j]){
  32. for (uint k=s[i];k;k-=lowbit(k)){
  33. uint t=lowbit(k);
  34. if (!(j&t)){
  35. f[i&1][j+t]+=f[i-1&1][j];
  36. }
  37. }
  38. }
  39. }
  40. memset(f[i-1&1],0,sizeof(f[i-1&1]));
  41. }
  42. }
  43. inline void p(){
  44. uint ans=0;
  45. for (uint i=1;i<=num;i++){
  46. ans+=f[n&1][i];
  47. }
  48. printf("%d",ans);
  49. }
  50. int Main(){
  51. in();
  52. dp();
  53. p();
  54. return 0;
  55. }
  56. int main(){;}
  57. int xlm=Main();