完全没有思路,状压到死没调出来……吐槽一下这题目描述的好不清楚啊好多人都理解错题了……

题解:

真的挺神仙的,因为有每列最多放1个的限制,所以考虑按列dp,设f[i][j]表示考虑前i列在[1,i]中的右区间中有j个1,初始状态f[0][0]=1;注:以下右区间表示[r[u],m];

记录l,r的前缀和sl,sr,但是这两个数组的含义并不一样,sl[i]表示前i列中有多少行左区间已经结束,sr[i]表示的则是前i列中有多少行右区间已经开始。

转移:首先只考虑第i列,枚举右区间1的个数j,如果第i列不放1,那么$f[i][j]+=f[i-1][j]$,如果第i列放1,现在不考虑前i-1列的应响,$f[i][j]+=f[i-1][j-1]*(sr[i]-j+1)$,这里解释一下这个$sr[i]-j+1$,在前i列包括sr[i]行的右区间可以放1,而前i-1列已经放了$j-1$个1占据了$(j-1)$行,所以第i列能放1的行数为$(sr[i]-(j-1))$,由乘法计数原理得以上式子。但是我们这是没有考虑前i列左区间的情况:同样枚举右区间放k个1,此时有(sl[i]-sl[i-1])个左区间在第i列结尾,所以此时有(sl[i]-sl[i-1])个1必须要放,而有i-k-sl[i-1]个位置可以放1,所以要乘$A_{i-k-sl[i-1]}^{sl[i]-sl[i-1]}$,如果不合法会变成负数。最后f[m][n]即为最后答案。

 1 #include<iostream>
 2 #include<cstdio>
 3 #define LL long long
 4 #define int LL
 5 #define mod 998244353
 6 #define MAXN 3010
 7 using namespace std;
 8 int n,m,l[MAXN],r[MAXN];
 9 int sl[MAXN],sr[MAXN],f[MAXN][MAXN];
10 signed main()
11 {
12     cin>>n>>m;
13     for(int i=1;i<=n;i++)cin>>l[i]>>r[i],sl[l[i]]++,sr[r[i]]++;
14     for(int i=1;i<=m;i++)sl[i]+=sl[i-1],sr[i]+=sr[i-1];
15     f[0][0]=1;
16     for(int i=1;i<=m;i++)
17     {
18         f[i][0]=f[i-1][0];
19         for(int j=1;j<=i;j++)
20             f[i][j]=(f[i-1][j]+f[i-1][j-1]*(sr[i]-j+1)%mod)%mod;
21         for(int k=0;k<=i;k++)
22         for(int j=sl[i-1];j<sl[i];j++)
23             f[i][k]=f[i][k]*(i-k-j)%mod;
24     }
25     printf("%lld\n",f[m][n]);
26 }

View Code

转载于:https://www.cnblogs.com/Al-Ca/p/11286366.html

HZOJ matrix相关推荐

  1. Android 自定义View ——Matrix (矩阵)

    Matrix的作用: Matrix类包含一个3x3矩阵,用于转换坐标 Matrix (矩阵) 的原理很遗憾自己目前也是含糊的很,这里就不说了,记录自己在项目使用的方法, 这里就简单的记录下Matrix ...

  2. Codeforces 903F Clear The Matrix(状态压缩DP)

    题目链接 Clear The Matrix 题意 给定一个$4 * n$的矩形,里面的元素为$'.'$或$'*'$.现在有$4$种正方形可以覆盖掉$'*'$,正方形的边长分别为$1,2,3,4$. 求 ...

  3. ie旋转滤镜Matrix

    旋转一个元素算是一个比较常见的需求了吧,在支持CSS3的浏览器中可以使用transform很容易地实现,这里有介绍:http://www.css88.com/archives/2168,这里有演示ht ...

  4. Eigen(1):Matrix模板类

    Matrix是一个模板类,利用模板类可以定义矩阵类. 矩阵类模板: 1Matrix类有6个模板参数,只需要了解前3个就好了. Matrix<typename Scalar, int RowsAt ...

  5. CUDA Samples: matrix multiplication(C = A * B)

    以下CUDA sample是分别用C++和CUDA实现的两矩阵相乘运算code即C= A*B,CUDA中包含了两种核函数的实现方法,第一种方法来自于CUDA Samples\v8.0\0_Simple ...

  6. 二维码Data Matrix的解码实现(zxing-cpp)

    二维码Data Matrix的介绍可以参考http://blog.csdn.net/fengbingchun/article/details/44279967 ,以下是通过zxing-cpp开源库实现 ...

  7. 二维码Data Matrix编码、解码使用举例

    二维码Data Matrix的介绍见: http://blog.csdn.net/fengbingchun/article/details/44279967  ,这里简单写了个生成二维码和对二维码进行 ...

  8. 二维码Data Matrix简介及在VS2010中的编译

    Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码 ...

  9. Educational Codeforces Round 9 F. Magic Matrix 最小生成树

    F. Magic Matrix 题目连接: http://www.codeforces.com/contest/632/problem/F Description You're given a mat ...

最新文章

  1. Day19-File操作-创建 删除,文件过滤
  2. NLP(3)| seq to seq 模型
  3. int?和int的区别
  4. UA MATH567 高维统计IV Lipschitz组合4 对称群上的均匀分布
  5. CRF++:一个 CRF 工具包
  6. 转载:IBM红米连接wifi的方法
  7. mysql怎么创建文字表_myMySQL数据库 如何将中文转拼音 MySQL数据库使用教程
  8. 安装Cornerstone3.1注意点
  9. aes 加密_结合RSA与AES实现前后端加密通信
  10. linux编译ko文件(不同内核源码版本)
  11. Python中表达式int('0x10, 36)的值是。。。
  12. ps -eo 用户自定义格式显示
  13. 超简单!Vue 短信验证码组件开发详解
  14. CentOS 7 多网卡绑定
  15. PostgreSQL在何处处理 sql查询之二十五
  16. 微信小程序的弹窗提示
  17. 计算机管理软件禁止玩游戏,如何禁止电脑指定程序不能运行 怎么屏蔽QQ或游戏运行提高办公效率...
  18. java else 语法错误_在else处语法错误,删除此令牌
  19. 一文道尽 Excel 的 Criterion
  20. 第6章 TCP/IP路由协议故障处理

热门文章

  1. 当 Vue 处理数组与处理纯对象的方式一样
  2. Django 中 cookie的使用
  3. 理论上每天有8.5到11.5小时的学习时间,可是为什么只有最多4小时是有效的?如何改善?...
  4. 20135337朱荟潼 Linux第八周学习总结——进程的切换和系统的一般执行过程
  5. 单片机温度控制系统DS18B20
  6. ioremap 与 mmap【转】
  7. CentOS6.4 利用sendEmail发邮件
  8. react 拖拽生成html,[React] 基于react 拖拽时间选择器
  9. 【Python-ML】探索式数据分析EDA(Exploratory Data Analysis)
  10. Apache Ignite与Apache Hive的个人理解与总结