BZOJ 5010: [Fjoi2017]矩阵填数
离散化
状压DP,一不小心就T了.......
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=1e9+7;
int h,w,m,n,Ex[1005],Ey[1005],Lim[1005],F[2005],cntx,cnty,cnt,Num[1005],belong[2005];
struct node{int x1,y1,x2,y2,lim;
}a[15];
int pow(int a,int b){int ans=1;while (b){if (b&1) ans=1ll*ans*a%mod;a=1ll*a*a%mod;b=b>>1;}return ans;
}
void Pre(){sort(Ex+1,Ex+cntx+1); cntx=unique(Ex+1,Ex+cntx+1)-Ex-1;sort(Ey+1,Ey+cnty+1); cnty=unique(Ey+1,Ey+cnty+1)-Ey-1;cnt=0;for (int i=2; i<=cntx; i++)for (int j=2; j<=cnty; j++){Num[++cnt]=(Ex[i]-Ex[i-1])*(Ey[j]-Ey[j-1]);Lim[cnt]=m;belong[cnt]=0;for (int k=0; k<n; k++) if (a[k].x1<=Ex[i-1] && a[k].x2>=Ex[i] && a[k].y1<=Ey[j-1] && a[k].y2>=Ey[j]) Lim[cnt]=min(Lim[cnt],a[k].lim);for (int k=0; k<n; k++) if (a[k].x1<=Ex[i-1] && a[k].x2>=Ex[i] && a[k].y1<=Ey[j-1] && a[k].y2>=Ey[j] && Lim[cnt]==a[k].lim) belong[cnt]|=(1<<k);}
}
int main(){int T;scanf("%d",&T);while (T--){scanf("%d%d%d%d",&h,&w,&m,&n);cntx=cnty=0;Ex[++cntx]=0;Ex[++cntx]=h;Ey[++cnty]=0;Ey[++cnty]=w;for (int i=0; i<n; i++){scanf("%d%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2,&a[i].lim);a[i].x1--,a[i].y1--;Ex[++cntx]=a[i].x1;Ex[++cntx]=a[i].x2;Ey[++cnty]=a[i].y1;Ey[++cnty]=a[i].y2;}Pre();memset(F,0,sizeof(F));F[0]=1;for (int i=1; i<=cnt; i++)for (int now=(1<<n)-1; now>=0; now--)if (F[now]){int Val=F[now];F[now]=0;(F[now|belong[i]]+=1ll*Val*(pow(Lim[i],Num[i])-pow(Lim[i]-1,Num[i])+mod)%mod)%=mod;(F[now]+=1ll*Val*pow(Lim[i]-1,Num[i])%mod)%=mod;}printf("%d\n",F[(1<<n)-1]);}return 0;
}
转载于:https://www.cnblogs.com/silenty/p/9887909.html
BZOJ 5010: [Fjoi2017]矩阵填数相关推荐
- [BZOJ5010][FJOI2017]矩阵填数(状压DP)
5010: [Fjoi2017]矩阵填数 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 90 Solved: 45 [Submit][Status ...
- 2018D2T2 P5023 填数游戏
P5023 填数游戏 https://www.luogu.com.cn/problem/P5023 解题参考: https://www.acwing.com/activity/content/code ...
- 第十一届蓝桥杯A组省赛填空试题 C: 蛇形填数(Java)
试题 C: 蛇形填数 本题总分:10 分 [问题描述] 如下图所示,小明用从 1 开始的正整数"蛇形"填充无限大的矩阵. 容易看出矩阵第二行第二列中的数是 5.请你计算矩阵中第 2 ...
- 【NOIP2015】【Luogu2615】神奇的幻方(模拟填数)
problem 给一定n*n的矩阵,要求填上1~n*n的数,使之每行.列.对角线的和都相等. n为奇数时,按如下步骤构建: 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列 ...
- 多项式辗转相除法求最大公约数_点灯游戏、方格填数与 Chebyshev 多项式(续)...
本文是上一篇文章的续集. 预告:上篇文章说过的基解可视化在本文末尾,不想看中间推导过程的可以直接拉到最底下看图.个人觉得这些图都相当地优美,大概这就是数学的魅力吧. Chebyshev 多项式的性质 ...
- 【NOIP2018提高组D2T2】填数游戏
前言--2020.10.17 下面的公式推导似乎有些出锅,具体情况就看图想想. Description 小D特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n*m的矩形表格.玩家 ...
- 【题解】[NOIP2018 提高组] 填数游戏
题意 给你一个 01 矩阵,一条从左上到右下的路径,可以表述为 DR 的字符串和 01 串.构造填数方案,满足 DR 串小的 01 串一定大. Solution: 考点:数学+搜索+找规律/推式子. ...
- Zig-Zag(Z型)填数
描述 在一个m*n的数组中,按照Zig-Zag的顺序依次填写1,2,3,-m*n. 输入 两个整数m,n表示m*n的矩阵,整数间以空格隔开.2<=m,n<100 输出 输出矩阵 样例1 输 ...
- 方块填数 “数独”是当下炙手可热的智力游戏。一般认为它的起源是“拉丁方块”,是大数学家欧拉于1783年发明的。 如图[1.jpg]所示:6x6的小格被分为6个部分(图中用不同的颜色区分),每个部
/* 方块填数 "数独"是当下炙手可热的智力游戏.一般认为它的起源是"拉丁方块",是大数学家欧拉于1783年发明的. 如图[1.jpg]所示:6x6的小格被分为 ...
最新文章
- 知识图谱实体链接是什么?一份“由浅入深”的综述
- 通信 / HTTP / 什么是 REST 接口
- Java黑皮书课后题第10章:10.4(MyPoint类)设计一个名为MyPoint的类,代表一个以x坐标和y坐标表示的点
- WebView http图片加载失败
- SAP Spartacus 自定义指令的实现以及通过@HostBinding实现属性绑定
- 云南省行政村谷歌图层_云南省基本农田划定工作实施细则
- ArrayList和LinkedList使用不当,性能差距会如此之大!
- 性能提升120倍!滴滴东北大学提出自动结构化剪枝压缩算法框架
- Linux centosVMware df命令、du命令、磁盘分区
- 【Java】java.util.Objects 工具类方法研究
- 开店软件透彻分析推荐
- 12个新鲜出炉的Web开发框架
- python语言程序设计期末试卷_Python语言程序设计17182试题题目及答案,课程2020最新期末考试题库,章节测验答案...
- IE9 和 IE11 安装及相关补丁
- pbootcms模板,pbootcms模板程序,pboot响应式模板
- MATLAB中.m文件命名规则
- Python制作个人动漫头像(简化版)
- 织梦模板被植入index.html,织梦dedecms百度快照劫持注入代码防范
- android 亮屏 激活自动亮度调节,Android 屏幕亮度调节(2.0以后出现亮度自动调节)如何开启、关闭亮度自动调节...
- 3D建模贴图是个啥?先薅羊毛再说!(附1000张高清3D贴图素材)
热门文章
- html中富田文本,富田桥曾氏游浆豆腐制作技艺
- 平方预测误差(Squared prediction error,SPE)和霍特林统计量(Hotelling’s T2)原理
- unity lua 交互比较好的文章
- 读书-每天为自己打个勾-郭腾尹
- Linux下的motion detection(最简单的办公室监控系统) 邮件自动发送
- 职业经验 聊一聊职业发展
- 【HTML基础】CSS样式表
- java代码怎么打印松树_用JAVA画一颗树(Applet)
- 爱是瞬间的美,情是永恒的痛
- Chromium之工程依赖关系.