小水题。题意就是不断随机放一个 \(1 \times 2\) 骨牌,然后取走里面的东西。求期望多少次取走所有的东西。然后有一维很小。

首先显然 minmax 容斥,将最后取走转化为钦定一些物品,求第一个取走的期望。

然后显然第一个取走的期望只和剩下能盖到物品的骨牌数有关。

一个骨牌能盖到物品只和相邻的两个格子是否钦定了物品有关。这个显然可以轮廓线优化。

然后套用 minmax 容斥公式直接算出来。

复杂度 \(O\left(n^2m^2 2^n\right)\)

数组清空写错了,导致 dp 状态 disappeared……调了好一会……

  1. #include <bits/stdc++.h>
  2. const int mod = 998244353;
  3. typedef long long LL;
  4. void reduce(int & x) { x += x >> 31 & mod; }
  5. int mul(int a, int b) { return (LL) a * b % mod; }
  6. int fastpow(int a, int b, int res = 1) {
  7. for (; b; b >>= 1, a = mul(a, a)) if (b & 1) res = mul(res, a);
  8. return res;
  9. }
  10. int dp[2][1 << 6][1200], ansl[1200];
  11. int n, m;
  12. bool mat[110][10];
  13. char buf[110];
  14. int main() {
  15. std::ios_base::sync_with_stdio(false), std::cin.tie(0);
  16. std::cin >> n >> m;
  17. const int E = n * (m - 1) + m * (n - 1);
  18. for (int i = 0; i != n; ++i) {
  19. std::cin >> buf;
  20. for (int j = 0; j != m; ++j)
  21. mat[j][i] = buf[j] == '*';
  22. }
  23. const int U = 1 << n;
  24. int lst = 0, now = 1;
  25. dp[now][0][0] = mod - 1;
  26. for (int i = 0; i != m; ++i) {
  27. for (int j = 0; j != n; ++j) {
  28. std::swap(lst, now);
  29. for (int k = 0; k < U; ++k)
  30. memset(dp[now][k], 0, E + 1 << 2);
  31. bool can = mat[i][j];
  32. for (int l = 0; l != U; ++l) {
  33. int delta = 0;
  34. if (i) delta += ~l >> j & 1;
  35. if (j) delta += ~l >> j - 1 & 1;
  36. int tar = l & ~(1 << j), tar2 = tar | 1 << j;
  37. for (int k = 0; k <= E; ++k)
  38. if (int t = dp[lst][l][k]) {
  39. reduce(dp[now][tar][k + delta] += t - mod);
  40. if (can) reduce(dp[now][tar2][k] -= t);
  41. }
  42. }
  43. }
  44. }
  45. for (int i = 0; i != U; ++i)
  46. for (int j = 0; j <= E; ++j)
  47. reduce(ansl[j] += dp[now][i][j] - mod);
  48. int ans = 0;
  49. for (int i = 0; i < E; ++i)
  50. reduce(ans += fastpow(E - i, mod - 2, ansl[i]) - mod);
  51. ans = mul(ans, E);
  52. std::cout << ans << std::endl;
  53. return 0;
  54. }

【集训队作业2018】小Z的礼物的更多相关文章

  1. [UOJ422][集训队作业2018]小Z的礼物——轮廓线DP+min-max容斥

    题目链接: [集训队作业2018]小Z的礼物 题目要求的就是最后一个喜欢的物品的期望得到时间. 根据$min-max$容斥可以知道$E(max(S))=\sum\limits_{T\subseteq ...

  2. UOJ 422 [集训队作业2018] 小Z的礼物 min-max容斥 期望 轮廓线dp

    LINK:小Z的礼物 太精髓了 我重学了一遍min-max容斥 重写了一遍按位或才写这道题的. 还是期望多少时间可以全部集齐. 相当于求出 \(E(max(S))\)表示最后一个出现的期望时间. 根据 ...

  3. 【UOJ#422】【集训队作业2018】小Z的礼物(min-max容斥,轮廓线dp)

    [UOJ#422][集训队作业2018]小Z的礼物(min-max容斥,轮廓线dp) 题面 UOJ 题解 毒瘤xzy,怎么能搬这种题当做WC模拟题QwQ 一开始开错题了,根本就不会做. 后来发现是每次 ...

  4. 2019.2.25 模拟赛T1【集训队作业2018】小Z的礼物

    T1: [集训队作业2018]小Z的礼物 我们发现我们要求的是覆盖所有集合里的元素的期望时间. 设\(t_{i,j}\)表示第一次覆盖第i行第j列的格子的时间,我们要求的是\(max\{ALL\}\) ...

  5. UOJ#422. 【集训队作业2018】小Z的礼物

    #422. [集训队作业2018]小Z的礼物 min-max容斥 转化为每个集合最早被染色的期望时间 如果有x个选择可以染色,那么期望时间就是((n-1)*m+(m-1)*n))/x 但是x会变,中途 ...

  6. UOJ #449. 【集训队作业2018】喂鸽子

    UOJ #449. [集训队作业2018]喂鸽子 小Z是养鸽子的人.一天,小Z给鸽子们喂玉米吃.一共有n只鸽子,小Z每秒会等概率选择一只鸽子并给他一粒玉米.一只鸽子饱了当且仅当它吃了的玉米粒数量\(≥ ...

  7. [集训队作业2018]蜀道难——TopTree+贪心+树链剖分+链分治+树形DP

    题目链接: [集训队作业2018]蜀道难 题目大意:给出一棵$n$个节点的树,要求给每个点赋一个$1\sim n$之内的权值使所有点的权值是$1\sim n$的一个排列,定义一条边的权值为两端点权值差 ...

  8. 【UOJ#450】【集训队作业2018】复读机(生成函数,单位根反演)

    [UOJ#450][集训队作业2018]复读机(生成函数,单位根反演) 题面 UOJ 题解 似乎是\(\mbox{Anson}\)爷的题. \(d=1\)的时候,随便怎么都行,答案就是\(k^n\). ...

  9. 【国家集训队2010】小Z的袜子[莫队算法]

    [莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...

  10. UOJ#418. 【集训队作业2018】三角形

    #418. [集训队作业2018]三角形 和三角形没有关系 只要知道儿子放置的顺序,就可以直接模拟了 记录历史最大值 用一个pair(a,b):之后加上a个,期间最大值为增加b个 合并? A1+A2= ...

随机推荐

  1. Http 协议学习

    借助[小坦克:HTTP 协议教程] 1.HTTP协议是什么 协议是计算机在通信过程中必须共同遵守的规则,我的理解是类似所有汽车在行驶过程中必须共同遵守的交通规则一样. http协议叫超文本协议,是一种 ...

  2. 算法:二叉树的层次遍历(递归实现+非递归实现,lua)

    二叉树知识参考:深入学习二叉树(一) 二叉树基础 递归实现层次遍历算法参考:[面经]用递归方法对二叉树进行层次遍历 && 二叉树深度 上面第一篇基础写得不错,不了解二叉树的值得一看. ...

  3. [C#.net]连接Oracle的几种方式

    一:通过System.Data.OracleClient(需要安装Oracle客户端并配置tnsnames.ora)1. 添加命名空间System.Data.OracleClient引用2. usin ...

  4. .net get set用法

    在早期学习c#的过程中,经常遇到这样的语句: public string StudentName{           get{return stuName;}           set{stuNa ...

  5. idea2019 Tomcat9 Tomcat Localhost log 乱码

    网上一顿搜索,基本没用,可能版本不一样. idea2019 tomcat9解决方案: 找到Tomcat的安装目录,进入conf目录 打开logging.properties 找到java.util.l ...

  6. ZROIDay3-比赛解题报告

    ZROIDay3-比赛解题报告 瞎扯 从今天开始考试有点不在状态,可能是因为不太适应题目的原因,T1已经接近了思想但是没有想到状态转移,T2思考方向错误,T3不会打LCT,还是太菜了 A 考场上想到要 ...

  7. TensorFlow良心入门教程

    All the matrials come from Machine Learning class in Polyu,HK and I reorganize them and add referenc ...

  8. luogu P4688 [Ynoi2016]掉进兔子洞

    luogu 我们要求的答案应该是三个区间长度\(-3*\)在三个区间中都出现过的数个数 先考虑数列中没有相同的数怎么做,那就是对三个区间求交,然后交集大小就是要求的那个个数.现在有相同的数,考虑给区间 ...

  9. centos7安装配置zabbix监控

    CentOs7安装部署Zabbix3.4 1.关闭selinux和firewall systemctl  stop  firewalld setenforce 1.1检测selinux是否关闭 [ro ...

  10. Windows 下的快捷键

    电脑快捷键小技巧window健 + r   →  msconfig       查看电脑的开机启动项window健 + r   →  notepad        无标题的记事本window健 + r ...