P3813 [FJOI2017]矩阵填数 shadowice1984说:看到计数想容斥........ 这题中,我们把图分成若干块,每块的最大值域不同 蓝后根据乘法原理把每块的方案数(互不相干)相乘. 怎么计算每块方案数呢 把子矩阵按最大值从小到大排序 暴力预处理好每$k(1<=k<=n)$个矩阵之间的交集.并集 设最大值为$v$的位置的集合大小为$S$ 那么我们算出来(本层)的结果就是v^{|S|} 然鹅我们并没有减去某些矩阵没有到最大值(最大只取到$v-1$)的情况 于是对于每个最大值为$…
题目链接: https://www.luogu.org/problemnew/show/P3813 题目: 给定一个 h*w的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w. 在这个矩阵中你需要在每个格子中填入 1..m中的某个数. 给这个矩阵填数的时候有一些限制,给定 n 个该矩阵的子矩阵,以及该子矩阵的最大值 v,要求你所填的方案满足该子矩阵的最大值为 v. 现在,你的任务是求出有多少种填数的方案满足 n 个限制. 两种方案是不一样的当且仅当两个方案至少存在一个格子上…
传送门 矩阵很大,但是发现 $n$ 很小,从这边考虑,对于一个一堆小矩阵放在一起的情况 考虑把每一块单独考虑然后方案再乘起来 但是这些奇怪的东西很不好考虑 所以暴力一点,直接拆成一个个小块 但是这样我们还要考虑到小矩形的限制,设 $f[i][S]$ 表示现在考虑完第 $i$ 个小块,小矩形的限制满足的状态为 $S$ 时的方案数 发现这些小块不会跨过矩形,维护每个小块的限制(即这个块能填的最大的数)$Mx$,以及这个小块填最大数时,能使哪些小矩形满足限制 ($P$) 设小块的面积为 $S$,那么如…
参考:题解 P3813 [[FJOI2017]矩阵填数] 题目大意: 给定一个 h∗w 的矩阵,矩阵的行编号从上到下依次为 1...h ,列编号从左到右依次 1...w . 在这个矩阵中你需要在每个格子中填入 1...m 中的某个数. 给这个矩阵填数的时候有一些限制,给定 n个该矩阵的子矩阵,以及该子矩阵的最大值 v ,要求你所填的方案满足该子矩阵的最大值为 v . 现在,你的任务是求出有多少种填数的方案满足 n 个限制. 两种方案是不一样的当且仅当两个方案至少存在一个格子上有不同的数.由于答案…
5010: [Fjoi2017]矩阵填数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 45[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一些限制,给定 n 个该矩阵的子矩阵,以及该子矩阵的 最大值 v,要求你所填的方案满…
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一些限制,给定 n 个该矩阵的子矩阵,以及该子矩阵的 最大值 v,要求你所填的方案满足该子矩阵的最大值为 v.现在,你的任务是求出有多少种填数的方案满足 n 个限 制.两种方案是不一样的当且仅当两个方案至少存在一个格子上有不同的数.由于答案可能很大,你只需要输出答 案 对 1,000,000,007…
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一些限制,给定 n 个该矩阵的子矩阵,以及该子矩阵的 最大值 v,要求你所填的方案满足该子矩阵的最大值为 v.现在,你的任务是求出有多少种填数的方案满足 n 个限 制.两种方案是不一样的当且仅当两个方案至少存在一个格子上有不同的数.由于答案可能很大,你只需要输出答 案 对 1,000,000,007…
如果只考虑某个子矩阵的话,其最大值为v的方案数显然是vsize-(v-1)size.问题在于处理子矩阵间的交叉情况. 如果两个交叉的子矩阵所要求的最大值不同,可以直接把交叉部分划给所要求的最大值较小的子矩阵.那么,所要求最大值不同的格子彼此间是独立的.于是现在可以只考虑要求相同的格子. 直接计算似乎很麻烦.由于n很小,考虑一个很套路的容斥:至少0个不满足限制的方案数-至少1个不满足限制的方案数+至少2个不满足限制的方案数……于是我们可以枚举哪些矩阵不满足限制,剩下的随便填(当然要在所限制的最大值…
[算法]离散化+容斥原理 [题意]给定大矩阵,可以每格都可以任意填1~m,给定n个子矩阵,要求满足子矩阵内的最大值为vi,求方案数. n<=10,h,w<=1w. [题解] 此题重点之一在于离散化,因为有效坐标很少,离散化后遵循左闭右开计算矩阵点数. 然后对于每个格,能填的最大值是min(m,vi),vi为覆盖到该点的所有小矩阵,就此算出总方案数. 现在多考虑了一些情况,就是每个小矩阵中至少要有一个格子是最大值,不符合的情况需要剔除. 考虑容斥原理,奇加偶减,不过这里是总方案-容斥部分,所以是…
[Luogu3813] [LOJ2280] 写得很好的题解 \(1.\)离散化出每一块内部不互相影响的块 \(2.\)\(dp[i][j]\)为前 \(i\) 种重叠块其中有 \(j\) 这些状态的矩阵的最大值被满足了的方案数 , 这样转移就之和这个块有关了 , 直接计算取最大值和不取的方案数即可 则当取最大值时,把对应方案数转移到 \(dp[i + 1][j | s[i + 1]]\),否则转移到 \(dp[i + 1][j]\) 故 \(dp[Bcnt][(1 << n) - 1]\)为最…
矩阵填数 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w. 在这个矩阵中你需要在每个格子中填入 1..m 中的某个数. 给这个矩阵填数的时候有一些限制,给定 n 个该矩阵的子矩阵,以及该子矩阵的最大值 v,要求你所填的方案满足该子矩阵的最大值为 v. 现在,你的任务是求出有多少种填数的方案满足 n…
LINK:矩阵填数 刚看到题目的时候感觉是无从下手的. 可以看到有n<=2的点 两个矩形. 如果只有一个矩形 矩形外的方案数容易计算考虑 矩形内的 必须要存在x这个最大值 且所有值<=x. 直接计算是不易的 需要讨论到底哪个位置有最大值 然后还有重复 很繁琐.可以直接容斥 可以求出<=x的方案数 <=x-1的方案数也可以求出 做差即可得到存在x出现的方案数. 考虑两个矩形 如果不交 那么显然是各算各的 如果相交 讨论相交的这部分到底存在x 然后进一步的讨论从而计算答案. 可以发现这…
题解 我们发现没有限制的小方格可以随便填 然后考虑有限制的,我们把它切割成一个个小块(枚举相邻的横纵坐标),然后记录一下这个小块的最大值限制(也就是所有覆盖它的矩形最小的最大值) 记录一下每个小块的大小,和每个小块在哪些有限制的大矩形,且小块的最大值限制等于大矩形的最大值限制,用一个二进制数表示 然后可以状压dp了,每次枚举这个小块里面填不填最大值,填了就是\(V^{n} - (V - 1)^{n}\)不填就是\((V - 1)^{n}\) 代码 #include <bits/stdc++.h>…
状压 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…
描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定N和M,小Hi希望知道一共有多少种不同的填法. 输入 一行包含两个整数N和M. 对于60%的数据 1 <= N <= 2, 1 <= M <= 100000 对于20%的数据 N = 3, 1 <= M <= 100 对于100%的数据 1 <= N <= 3,…
面向对象的上机实验 题目 以下列方式向 5*5 矩阵中填入数字.设数字i(1=<i<=25),则数字i+1 的坐标位置应为(E, W).(E, W)可根据下列关系由(x,y)算出: 1)(E, W)=(x±3,y) 2)(E, W)=(x,y±3) 3)(E, W)=(x±2,y±2) 求解问题如下: 编写一个程序,当数字1被指定于某个起始位置时,列举出其它24个数字应在的位置:列举该条件下的所有可能方案. 参考答案 网上搜索到数学奥赛中本题的Pascal代码 来自http://blog.si…
题意 你有一个\(h\times w\)的棋盘,你需要在每个格子里填\([1, m]\)中的某个整数,且满足\(n\)个矩形限制:矩形的最大值为某定值.求方案数\(\bmod 10^9+7\) \(h, w, m\leq 10^4,n\leq 10\) 题解 首先来考虑单独的一个矩形限制怎么做.假设矩形面积为\(s\),最大值为\(v\) 易得答案是\(v^{s}-(v-1)^{s}\),意思就是每个数随便选,然后减去所有数\(<v\)的方案 现在考虑\(n\)个限制,实际上把棋盘分成了\(O(…
[题目链接]:http://hihocoder.com/problemset/problem/1480 [题意] [题解] 这是一道杨氏矩阵的题; 一个固定形状的杨氏矩阵的种类个数; 等于这个杨氏矩阵的元素个数->设为n; 然后对于每一个元素的下标i,j 则总的个数为 n!/(所有元素下标i+j-1的乘积) 这里的i+j-1就对应了i,j上面的元素和左边的元素的总个数; 当做结论记吧. 涉及到了除法取模; 要写个乘法逆元; [Number Of WA] 1 [完整代码] #include <b…
Description There is a robot, its task is to bury treasures in order on a N × M grids map, and each treasure can be represented by its weight, which is an integer. The robot begins to bury the treasures from the top-left grid. Because it is stupid, i…
 蛇形填数: 在n×n方阵里填入1,2,....,n×n,要求填成蛇形.例如,n = 4 时方阵为:    10  11  12  1   9  16  13  2 8  15  14  3 7   6    5   4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出.n <= 8 . 类比上面这种数学中的矩阵,我们可以考虑使用一个二维数组来储存. 解题思路:从右上角开始往下填数,当到底的时候转向左填值,当到左边的边的时候转向上填数,当到最上面的时候转向右填值...依次类推.第一轮转…
螺旋填数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 一天,小明在研究蜗牛的壳时,对其螺旋状的花纹感到十分有趣.于是他回到了家中,画出了一个螺旋花纹,但是他对这样的图案并不满意,他想要得到一个螺旋的n * n矩阵,于是他以1开始,顺时针螺旋地在螺旋花纹中填入一个数,保证这个数比上一个数大1,一直按照规则填直到填出一个n * n的矩阵为止.于是小明根据螺纹做出了以下的规则:螺旋填数由1开始,开始填入方向为右,然后向下,再向左…
#include <iostream> #include<string> #include<algorithm> using namespace std; ; int a[maxn][maxn]; bool vis[maxn][maxn]={false};//是否访问数组 int main () { int m,n;//m行n列的矩阵 int i,j; ;//计算输出元素个数 cin>>m>>n; i=;j=;//初始化起点坐标 while(cn…
题目戳我 \(\text{Solution:}\) 题目标签是\(dp,\)但是纯暴力打表找规律可以有\(65\)分. 首先是对于\(O(2^{nm}*nm)\)的暴力搜索,显然都会. 考虑几条性质: 每一条由左下到右上的对角线需要非严格单调递减. 若\(a[i][j-1]=a[i-1][j]\)则以\(a[i][j]\)为左上角的矩阵填的数必须相等. 证明: 对于第一条,若不满足这条性质,则必然存在一个路径,\(R\to 1,D\to 0\)使得其不满足题意. 对于第二条,首先满足\(R\to…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…
蛇形填数 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4   输入 直接输入方陈的维数,即n的值.(n<=100) 输出 输出结果是蛇形方陈. 样例输入 3 样例输出 7 8 1 6 9 2 5 4 3 #include <iostream> #include <vector> #include…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…
%test pcaA=[3,7,1,4,1;5,5,2,1,3;4,2,4,5,3];S=cov(A);T=cov(A');[ds,vs]=eig(S)[dt,vt]=eig(T) 样本数量少于矩阵维数,发现[dt,vt]=eig(S)中非零特征值个数总是等于:样本数量-1 其二,用转置来替代的话,暂没有发现什么规律…
因为傻逼写错高精度搞了一下午浪费好多时间,好想哭qaq 原题: 帅帅经常更同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij据为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有的元素: 2. 每次取走的各个元素只能是该元素所在行的行首或行尾: 3. 每次取数都有一个得分值,为每行取数的得分之和:每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号):  4. 游戏结束总得分为m次取数得分之和. 帅帅想请…
O(n4)->O(n3)妈呀为什么跑这么慢woc #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memse…