loj2280 「FJOI2017」矩阵填数
状压 dp。参考there
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
int T, h, w, m, n, dp[1055][1055], qx[55], qy[55], dx, dy, blc, sss[505], bel[505];
int maxn[505];
const int mod=1000000007;
struct Node{
int xu, yu, xv, yv, vv;
}nd[15];
bool f(int x, int y, int i){
return (x>nd[i].xu && y>nd[i].yu && x<=nd[i].xv && y<=nd[i].yv);
}
int ksm(int a, int b){
int re=1;
while(b){
if(b&1) re = (ll)re * a % mod;
a = (ll)a * a % mod;
b >>= 1;
}
return re;
}
int main(){
cin>>T;
while(T--){
memset(dp, 0, sizeof(dp));
memset(bel, 0, sizeof(bel));
dx = dy = blc = 0;
scanf("%d %d %d %d", &h, &w, &m, &n);
for(int i=1; i<=n; i++){
scanf("%d %d %d %d %d", &nd[i].xu, &nd[i].yu, &nd[i].xv, &nd[i].yv, &nd[i].vv);
nd[i].xu--; nd[i].yu--;
qx[++dx] = nd[i].xu; qx[++dx] = nd[i].xv;
qy[++dy] = nd[i].yu; qy[++dy] = nd[i].yv;
}
qx[++dx] = 0;
qy[++dy] = 0;
qx[++dx] = h;
qy[++dy] = w;
sort(qx+1, qx+1+dx);
sort(qy+1, qy+1+dy);
dx = unique(qx+1, qx+1+dx) - (qx + 1);
dy = unique(qy+1, qy+1+dy) - (qy + 1);
for(int i=2; i<=dx; i++)
for(int j=2; j<=dy; j++){
blc++;
sss[blc] = (qx[i] - qx[i-1]) * (qy[j] - qy[j-1]);
maxn[blc] = m;
for(int k=1; k<=n; k++)
if(f(qx[i], qy[j], k))
maxn[blc] = min(maxn[blc], nd[k].vv);
for(int k=1; k<=n; k++)
if(f(qx[i], qy[j], k) && maxn[blc]==nd[k].vv)
bel[blc] |= 1<<(k-1);
}
dp[0][0] = 1;
for(int i=1; i<=blc; i++){
int fai=ksm(maxn[i]-1, sss[i]);
int suc=(ksm(maxn[i], sss[i])-fai+mod)%mod;
for(int j=0; j<(1<<n); j++){
dp[i][j] = (dp[i][j] + (ll)dp[i-1][j]*fai%mod) % mod;
dp[i][j|bel[i]] = (dp[i][j|bel[i]] + (ll)dp[i-1][j]*suc%mod) % mod;
}
}
printf("%d\n", dp[blc][(1<<n)-1]);
}
return 0;
}
loj2280 「FJOI2017」矩阵填数的更多相关文章
- 【LOJ】#2280. 「FJOI2017」矩阵填数
题解 我们发现没有限制的小方格可以随便填 然后考虑有限制的,我们把它切割成一个个小块(枚举相邻的横纵坐标),然后记录一下这个小块的最大值限制(也就是所有覆盖它的矩形最小的最大值) 记录一下每个小块的大 ...
- 【BZOJ5010】【FJOI2017】矩阵填数 [状压DP]
矩阵填数 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行 ...
- 「BZOJ 5010」「FJOI 2017」矩阵填数「状压DP」
题意 你有一个\(h\times w\)的棋盘,你需要在每个格子里填\([1, m]\)中的某个整数,且满足\(n\)个矩形限制:矩形的最大值为某定值.求方案数\(\bmod 10^9+7\) \(h ...
- [FJOI2017]矩阵填数——容斥
参考:题解 P3813 [[FJOI2017]矩阵填数] 题目大意: 给定一个 h∗w 的矩阵,矩阵的行编号从上到下依次为 1...h ,列编号从左到右依次 1...w . 在这个矩阵中你需要在每个格 ...
- P3813 [FJOI2017]矩阵填数(组合数学)
P3813 [FJOI2017]矩阵填数 shadowice1984说:看到计数想容斥........ 这题中,我们把图分成若干块,每块的最大值域不同 蓝后根据乘法原理把每块的方案数(互不相干)相乘. ...
- [BZOJ5010][FJOI2017]矩阵填数(状压DP)
5010: [Fjoi2017]矩阵填数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 90 Solved: 45[Submit][Status][ ...
- bzoj5010: [Fjoi2017]矩阵填数
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一 ...
- bzoj 5010: [Fjoi2017]矩阵填数
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一 ...
- [luogu P3813] [FJOI2017] 矩阵填数 解题报告 (容斥原理)
题目链接: https://www.luogu.org/problemnew/show/P3813 题目: 给定一个 h*w的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w. ...
随机推荐
- Eclipse 主题(Theme)配置
< 程序员大牛必备的装逼神器 > 一个牛逼的程序员,除了有牛逼的技术,还要有高逼格的风格,说白了,就和人一样,单是内在美还不行,必须外表也要美,就好比,一个乞丐,他内在美,但是全身臭气熏天 ...
- QrenCode : linux命令行下生成二维码图片
原文链接:http://wowubuntu.com/qrencode.html # 作者:riku/ / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接. 对于二维码大家应该并不陌 ...
- 解决ueditor jquery javascript 取值问题
代码如下: var content = UE.getEditor('myEditor').getContent(); myEditor是ueditor 的名称name. 代码如下: <t ...
- <Android Framework 之路>多线程
多线程编程 JAVA多线程方式 1. 继承Thread线程,实现run方法 2. 实现Runnable接口 JAVA单继承性,当我们想将一个已经继承了其他类的子类放到Thread中时,单继承的局限就体 ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:2.技术简介之MinaFilter(1)
欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Filter filter:过滤器?(不知道是不是这么翻译,算了知道意思就好了╮(╯▽╰)╭),这种东西在很多语言中 ...
- mysql-新增、更新、删除语句
1.插入数据: INSERT INTO t_book VALUES(NULL,'我爱我家',20,'张三',1); INSERT INTO t_book(id,bookName,price,autho ...
- OTOH
OTOH n 网络用语 On the Other Hand 另一方面 [例句]OTOH, pressure on the keys of a digital AFTER bottoming can b ...
- J.U.C知识点梳理
java.util.concurrent : 提供了并发编程的解决方案 1.CAS 是java.util.concurrent.atomic包的基础 2.AQS是java.util.concurren ...
- c#和Java中的多态
多态:让一个对象表现出多种类型,写出通用的代码,最大限度的屏蔽各个子类之间的差异性. c#举例: 将父类的方法标记为虚方法 ,使用关键字 virtual,这个函数可以被子类重新写一个遍. //真的鸭子 ...
- Bootstrap历练实例:嵌套的媒体对象
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...