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. ...
随机推荐
- mysqldatadir 转移
当mysql data路径与原始目录不一致时 ,请在mysql 安装目录下my-default.ini 进行设置,取消对应#注释的地址,设置新地址,保存,重新启动,即可. 从网上各种搜索啊,各种尝试, ...
- wpf ListBox删除选择项(支持多项)
搞了个ListBox删除选择项,开始老是不能把选择项删除干净,剩下几个.后来调试一下原来是ListBox在删除一个选择项之后立即更新,选择项也有变化.结果我想了个这样的方法来删除呵呵. Departm ...
- UESTC 1307 WINDY数 (数位DP,基础)
题意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数.windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 思路: 就是给连续的两 ...
- vue 中根据地址名称获取实际经纬度方法
<div id="container" class="map" style="margin-top:30px; width: 1200px;he ...
- python实现单链表翻转
题目描述: 翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑 ...
- python_106_创建类的两种方式
class Foo(object): def __init__(self, name): self.name = name f = Foo("alex") print(type(f ...
- Bootstrap标签页(Tab)插件
标签页(Tab)在Bootstrap导航元素一章中简介过,通过结合一些data属性,您可以轻松地创建一些标签页界面.通过这个插件您可以把内容放置在标签页或胶囊式标签页甚至是下拉菜单标签页中. 用法 您 ...
- 【转】浅谈对主成分分析(PCA)算法的理解
以前对PCA算法有过一段时间的研究,但没整理成文章,最近项目又打算用到PCA算法,故趁热打铁整理下PCA算法的知识.本文观点旨在抛砖引玉,不是权威,更不能尽信,只是本人的一点体会. 主成分分析(PCA ...
- 【动态规划】51nod1780 完美序列
巧妙的转化:f前两维大小开反TLE了一发…… 如果一个序列的相邻两项差的绝对值小于等于1,那么我们说这个序列是完美的. 给出一个有序数列A,求有多少种完美序列排序后和数列A相同. Input 第一行一 ...
- CentOS7下Mysql5.7主从数据库配置
本文配置主从使用的操作系统是Centos7,数据库版本是mysql5.7. 准备好两台安装有mysql的机器(mysql安装教程链接) 主数据库配置 每个从数据库会使用一个MySQL账号来连接主数据库 ...