题目描述

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

众所周知,李电很喜欢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. 最全Kubernetes审计日志方案

    前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...

  2. 1008-Redo

    关于flag,都立下了 T1 考试的时候就觉得是贪心,但是不会反悔emm…… 于是正解就是一个堆优化可反悔的贪心=.= 每次找前面最小的,于是是小根堆. 我们在交易的时候发现后面的一个可以更优. 于是 ...

  3. 写js过程中遇到的一个bug

    <div class="func_Div" id="xxcx"><span>信息查询</span>              ...

  4. 升级gitk后,Error in startup script: unknown color name "lime"

    $ gitkError in startup script: unknown color name "greeen" (processing "-fore" o ...

  5. spring cloud深入学习(十)-----配置中心和消息总线(配置中心终结版)

    如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用 ...

  6. PAT甲级——A1051 Pop Sequence

    Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, ..., N and p ...

  7. PAT甲级——A1047 Student List for Course

    Zhejiang University has 40,000 students and provides 2,500 courses. Now given the registered course ...

  8. PAT甲级——A1031 Hello World for U

    Given any string of N (≥) characters, you are asked to form the characters into the shape of U. For ...

  9. hibernate多表关联CascadeType类型的选择

    CascadeType.REMOVE//慎用 Cascade remove operation,级联删除操作.删除当前实体时,与它有映射关系的实体也会跟着被删除. CascadeType.MERGE ...

  10. 数据交换格式之 - XML

    XML简介 XML是一种可扩展的标记语言,被设计用来传输和存储数据.传输数据. 需要自定义标签,自我描述性,XML是W3C的推荐标准: XML的特点与作用 特点: xml与操作系统.编程语言的开发平台 ...