HZOJ matrix
完全没有思路,状压到死没调出来……吐槽一下这题目描述的好不清楚啊好多人都理解错题了……
题解:
真的挺神仙的,因为有每列最多放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]即为最后答案。
#include<iostream>
#include<cstdio>
#define LL long long
#define int LL
#define mod 998244353
#define MAXN 3010
using namespace std;
int n,m,l[MAXN],r[MAXN];
int sl[MAXN],sr[MAXN],f[MAXN][MAXN];
signed main()
{
cin>>n>>m;
for(int i=;i<=n;i++)cin>>l[i]>>r[i],sl[l[i]]++,sr[r[i]]++;
for(int i=;i<=m;i++)sl[i]+=sl[i-],sr[i]+=sr[i-];
f[][]=;
for(int i=;i<=m;i++)
{
f[i][]=f[i-][];
for(int j=;j<=i;j++)
f[i][j]=(f[i-][j]+f[i-][j-]*(sr[i]-j+)%mod)%mod;
for(int k=;k<=i;k++)
for(int j=sl[i-];j<sl[i];j++)
f[i][k]=f[i][k]*(i-k-j)%mod;
}
printf("%lld\n",f[m][n]);
}
HZOJ matrix的更多相关文章
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
- Pramp mock interview (4th practice): Matrix Spiral Print
March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...
- Atitit Data Matrix dm码的原理与特点
Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...
- Android笔记——Matrix
转自:http://www.cnblogs.com/qiengo/archive/2012/06/30/2570874.html#translate Matrix的数学原理 在Android中,如果你 ...
- 通过Matrix进行二维图形仿射变换
Affine Transformation是一种二维坐标到二维坐标之间的线性变换,保持二维图形的"平直性"和"平行性".仿射变换可以通过一系列的原子变换的复合来 ...
- [LeetCode] Kth Smallest Element in a Sorted Matrix 有序矩阵中第K小的元素
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- [LeetCode] Longest Increasing Path in a Matrix 矩阵中的最长递增路径
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
- [LeetCode] Search a 2D Matrix II 搜索一个二维矩阵之二
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- [LeetCode] Search a 2D Matrix 搜索一个二维矩阵
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
随机推荐
- IO流3 --- File类的常用方法2 --- 技术搬运工(尚硅谷)
File类的判断功能 @Test public void test5(){ File file = new File("hello.txt"); //判断是否是文件目录 Syste ...
- python Pandas文件读写
- hdu 1296 Polynomial Problem(多项式模拟)
Problem Description We have learned how to obtain the value of a polynomial when we were a middle sc ...
- BZOJ2069: [POI2004]ZAW
2069: [POI2004]ZAW Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 303 Solved: 138[Submit][Status][D ...
- Flask – SQLAlchemy成员增加
目录 简介 结构 展示 技术 运行 代码 创建数据库表单 views视图 home主页 添加成员addnew.html 展示页show_all 简介 结构 $ tree -I "__pyca ...
- 【风马一族_win10设置热点】win10无法开启热点怎么办
输入cmd,设置管理员开启 输入netsh wlan set hostednetwork mode=allow ssid=name(无线名字) key=00000000(8位以上密码); 输入nets ...
- Cron定时任务应用到Thinkphp – 贤生博客
Cron定时任务应用到Thinkphp 安装crontab: yum install crontabs 关于cron的一些命令: /sbin/service crond start //启动服务 /s ...
- 使用JSONObject进行序列化时,避开定义get或set为开头的方法名称
从结果中可以看到,JSONObject对Test对象进行序列化时,把fileName也当做属性了. 原因:涉及到JavaBean规范(参考:https://www.cnblogs.com/yusimi ...
- ubuntu上用源码进行一键安装mysql
首先卸载原有的mysql: 首先查看自己的mysql有哪些依赖 #dpkg --list|grep mysql 先卸载 #sudo apt-get remove mysql-common #sud ...
- 基于 DataLakeAnalytics 的数据湖实践
随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析.这样的好 ...