题目描述

他是一名普通的农电工,他以一颗无私奉献的爱岗敬业之心,刻苦钻研业务,以娴熟的技术、热情周到的服务赢得了广大客户的尊敬和赞美。他就是老百姓称为“李电”的李春来。

众所周知,李电很喜欢YY。一天,他又YY 了奇怪的东西。他假设他自己成了神,然后他说:“出来吧,矩阵。”然后一个N _M 的矩阵从天而降。他为了不要让矩阵太大而使得自己眼花缭乱,所以他将M 固定在了3。但是,一天之后,他想继续他之前的YY,继续玩他的矩阵,但是他的记忆力太差了,所以他不记得他原来的矩阵长得什么样,所幸的是他昨天记录下了矩阵中每行每列的和,还有矩阵的每项都是非负整数。所以他想知道满足这样条件的矩阵总共有多少种。

数据范围

对于20% 的数据,满足n <= 3,0<=a,b,c,s_i<=10

对于40% 的数据,满足n<=10,0<=a,b,c,s_i<=20

对于60% 的数据,满足n<=40,0<=a,b,c,s_i<=40

对于100% 的数据,满足n<=125,0<=a,b,c,s_i<=125

=w=

设f[i][j][k]表示,第i行中第一列填个j,第二列中填个k。

f[i][j][k]=∑f[i−1][j−a][k−b]并且满足a+b<=s[i]。

然后咧,这个是O(n5)的。

考虑一个第i行:



根据转移方程,f[i][j][k]是由图中这个黑色的等腰直角三角形转移过来的。

那么考虑维护这个等腰直角三角形:

黑色等腰直角三角形=红色长方形-(黄色等腰直角三角形-青绿色等腰直角三角形)

显然矩形前缀和以及腰所在的直线在x轴的等腰直角三角形前缀和容易维护。


时间复杂度为O(n3)。

代码

Const
maxn=135;
mo=100000000000000000;
Var
n,i,j,k,l,o:longint;
m1,m2,m3:longint;
f:array[0..maxn,0..maxn,0..maxn] of int64;
a,sum:array[0..maxn] of longint;
Function max(a,b:longint):longint;
begin
if (a>b) then exit(a);
exit(b);
end;
Begin
assign(input,'mat.in');reset(input);
assign(output,'mat.out');rewrite(output);
readlN(n);
readlN(m1,m2,m3);
for i:=1 to n do
begin
read(a[i]);
sum[i]:=sum[i-1]+a[i];
end;
if (sum[n]>m1+m2+m3) or (sum[n]<m1+m2+m3) then
begin
writeln(0);
end
else
begin
f[0][0][0]:=1;
for i:=1 to n do
begin
for j:=0 to m1 do
for k:=0 to m2 do
begin
if (sum[i]<j+k) then break;
if (sum[i]-j-k>m3) then continue;
for l:=0 to j do
for o:=max(0,j+k-a[i]-l) to k do
begin
if (sum[i]-j-k>=sum[i-1]-l-o) then
begin
f[i][j][k]:=(f[i][j][k]+f[i-1][l][o]) mod mo; end;
end;
end;
end;
writeln(f[n][m1][m2]);
end;
close(input);close(output);
End.

=o=

当一个f[i]从f[i-1]转移过来时,可以画个平面直角坐标系,看看要维护的是什么。

有必要的话,建立空间直角坐标系。

【JZOJ4901】【NOIP2016提高A组集训第18场11.17】矩阵的更多相关文章

  1. JZOJ 【NOIP2016提高A组集训第16场11.15】兔子

    JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...

  2. JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线

    JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...

  3. 【NOIP2016提高A组集训第4场11.1】平衡的子集

    题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪 ...

  4. 【JZOJ4846】【NOIP2016提高A组集训第5场11.2】行走

    题目描述 数据范围 对于70%的数据保证 n <= 1000 对于100%的数据保证 n,q <= 10^5,c_i,v_i <= 10^{18} 保证每次修改后的边权小于等于原来的 ...

  5. 【JZOJ4841】【NOIP2016提高A组集训第4场11.1】平衡的子集

    题目描述 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围 40%的数据满足: ...

  6. 【NOIP2016提高A组集训第14场11.12】随机游走

    题目 YJC最近在学习图的有关知识.今天,他遇到了这么一个概念:随机游走.随机游走指每次从相邻的点中随机选一个走过去,重复这样的过程若干次.YJC很聪明,他很快就学会了怎么跑随机游走.为了检验自己是不 ...

  7. 【NOIP2016提高A组集训第13场11.11】最大匹配

    题目 mhy12345学习了二分图匹配,二分图是一种特殊的图,其中的点可以分到两个集合中,使得相同的集合中的点两两没有连边. 图的"匹配"是指这个图的一个边集,里面的边两两不存在公 ...

  8. 【NOIP2016提高A组集训第14场11.12】随机游走——期望+树形DP

    好久没有写过题解了--现在感觉以前的题解弱爆了,还有这么多访问量-- 没有考虑别人的感受,没有放描述.代码,题解也写得歪歪扭扭. 并且我要强烈谴责某些写题解的代码不打注释的人,像天书那样,不是写给普通 ...

  9. 【JZOJ4895】【NOIP2016提高A组集训第16场11.15】三部曲

    =v= 因为外来的入侵,国王决定在某些城市加派士兵.所有城市初始士兵数量为0.当城市 被加派了k名士兵时.城市i的所有子城市需要被加派k+1名士兵.这些子城市的所有子城市需要被加派k+2名士兵.以此类 ...

随机推荐

  1. hibernate和jdbc的区别 优缺点

    JDBC与Hibernate在性能上相比,JDBC灵活性有优势.而Hibernate在易学性,易用性上有些优势.当用到很多复杂的多表联查和复杂的数据库操作时,JDBC有优势. 相同点: ◆两者都是JA ...

  2. springcloud 与分布式系统(转载)

    原地址:http://blog.csdn.net/neosmith/article/details/51919038 本文不是讲解如何使用spring Cloud的教程,而是探讨Spring Clou ...

  3. Java的一些小知识

    Switch和If的区别: Switch case成功后将不再向下继续执行,而If却要每个条件判断一遍.过于浪费: Java中的多态: 方法重载: 通常是指在同一个类中,相同的方法名对应着不同的方法实 ...

  4. java基础之自定义单链表练习

    一.单链表 1.单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置), ...

  5. WPF 禁用中文

    <TextBox InputMethod.IsInputMethodEnabled="False" />

  6. VMWare下载安装以及创建虚拟机教程

    参考博客https://blog.csdn.net/qq_39135287/article/details/83993574 下载 1.打开官网https://www.vmware.com/cn.ht ...

  7. 利用TensorFlow识别手写的数字---基于两层卷积网络

    1 为什么使用卷积神经网络 Softmax回归是一个比较简单的模型,预测的准确率在91%左右,而使用卷积神经网络将预测的准确率提高到99%. 2 卷积网络的流程 3 代码展示 # -*- coding ...

  8. 在VS中编译Opencascade6.6.0

    话说,OpenCASCADE团队真的很给力,版本更新速度也是嗖嗖地.依稀记得上次编译OCC,那时候的第三方库.OCC本身几何引擎库,全都得自己编译. 于是,编译过程之艰苦也就可想而知了.最近重换系统, ...

  9. Redis源码解析:12AOF持久化

    除了RDB持久化功能之外,Redis还提供了AOF(AppendOnly File)持久化功能.与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行 ...

  10. Java review-basic3

    Mutexes, ReadWriteLock, ArrayBlockingQueue, Thread pools, LinkedList vs ArrayList, Object Pooling, R ...