CF1060C Maximum Subrectangle
思路:
不难发现,对矩阵中的数字求和实际上是先分别对a,b两个数列中对应子段的元素求和再相乘。题目是要求在和不超过给定值的情况下使选出的矩阵面积最大。我们反其道而行之,考虑在子段长度一定的情况下,和最小是多少。具体来说,首先分别计算a的长度为1,2,...,n的子段中的和的最小值,记为min1[i](i = 1, 2, ..., n)。对b做类似处理得到min2[i](i = 1, 2, ..., m)。然后枚举min1和min2的所有组合即可得出答案。
实现:
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const int MAXN = ;
const int MAXM = ;
int a[MAXN], b[MAXM], n, m;
ll sum1[MAXN], sum2[MAXM], min1[MAXN], min2[MAXM], x;
int main()
{
while (cin >> n >> m)
{
memset(sum1, , sizeof sum1);
memset(sum2, , sizeof sum2);
memset(min1, 0x3f, sizeof min1);
memset(min2, 0x3f, sizeof min2);
for (int i = ; i <= n; i++)
{
cin >> a[i];
sum1[i] = sum1[i - ] + a[i];
}
for (int i = ; i <= m; i++)
{
cin >> b[i];
sum2[i] = sum2[i - ] + b[i];
}
cin >> x;
for (int i = ; i <= n; i++)
{
for (int j = ; j < n - i + ; j++)
{
min1[i] = min(min1[i], sum1[i + j] - sum1[j]);
}
}
for (int i = ; i <= m; i++)
{
for (int j = ; j < m - i + ; j++)
{
min2[i] = min(min2[i], sum2[i + j] - sum2[j]);
}
}
int ans = ;
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
if (min1[i] <= x && x / min1[i] >= min2[j])
{
ans = max(ans, i * j);
}
}
}
cout << ans << endl;
}
return ;
}
CF1060C Maximum Subrectangle的更多相关文章
- CF1060C Maximum Subrectangle【乘法分配律】【最大子矩阵】
CF1060C Maximum Subrectangle 题意翻译 现在给出一个长度为N的a数列,一个长度为M的b数列. 现在需要构造出一个矩阵c,其中ci,j=ai×bj.再给出一个x,请在矩 ...
- cf1060C. Maximum Subrectangle(思维 枚举)
题意 题目链接 Sol 好好读题 => 送分题 不好好读题 => 送命题 开始想了\(30\)min数据结构发现根本不会做,重新读了一遍题发现是个傻逼题... \(C_{i, j} = a ...
- C. Maximum Subrectangle
链接 [http://codeforces.com/contest/1060/problem/C] 题意 给你两个数列,可以构成一个矩阵C,ci,j=ai⋅bj 1≤x1≤x2≤n , 1≤y1≤y2 ...
- Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...
- codeforces_C. Maximum Subrectangle
http://codeforces.com/contest/1060/problem/C 题意: a.b数组长度分别为n.m.矩阵C,Cij=ai*bj.在C中找到一个子矩阵,该子矩阵所有元素和不大于 ...
- Codeforces 1060C Maximum Subrectangle(子矩阵+预处理)
题意:给出数组a,b,组成矩阵c,其中$c_{ij}=a_i*b_j$,找出最的大子矩阵,使得矩阵元素和<=x,求这个矩阵的size n,m<=2000 思路:对于子矩阵(l1...r1) ...
- Codeforces Round #513 总结
首次正式的$Codeforces$比赛啊,虽然滚粗了,然而终于有$rating$了…… #A Phone Numbers 签到题,然而我第一次写挂了(因为把11看成8了……) 只需要判断一下有多少个 ...
- Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) C D
C - Maximum Subrectangle 因为是两个数组相乘的到的 矩阵所以 a(i ->j)*b(x->y) 的面积 就是 a(i ->j) 的和乘与b(x-> ...
- Codeforces Round #513 游记
Codeforces Round #513 游记 A - Phone Numbers 题目大意: 电话号码是8开头的\(1\)位数字.告诉你\(n(n\le100)\)个数字,每个数字至多使用一次.问 ...
随机推荐
- SDOI2017 Round1 Day1 题解
不知道有几个AK的,除了出题人SB搬了个BZOJ3779以外,应该没什么因素阻碍AK吧.要是SCOI考这套题多好. BZOJ4816 数字表格 SB反演,推出答案为$\prod_{i=1}^nf^{\ ...
- 如何使用Psyco为你的Python程序提速
psyco加速Python执行速度的方法:要求: 版本对照:File name Python versions Well-tested withpsyco-x.y-win32-py ...
- 微信小程序网络请求wx.request请求
最近微信小程序开始开放测试了,小程序提供了很多api,极大的方便了开发者,其中网络请求api是wx.request(object),这是小程序与开发者的服务器实现数据交互的一个很重要的api. 百牛信 ...
- 使用 SourceTree 管理ios项目
SourceTree 是一个非常优秀的版本控制软件,他是一个客户端,方便我们去接入 GitHub .BitBucke 上面托管的代码. 声明(1——4是来自简书的非个人作品,仅仅保存资料学习使用) 一 ...
- Codeforces1110F Nearest Leaf dfs + 线段树 + 询问离线
Codeforces1110F dfs + 线段树 + 询问离线 F. Nearest Leaf Description: Let's define the Eulerian traversal of ...
- 改变bootstrapSwitch按钮状态
$('.switch-state').bootstrapSwitch('state',true);
- Flutter实战视频-移动电商-31.列表页_列表切换交互制作
31.列表页_列表切换交互制作 博客地址:https://jspang.com/post/FlutterShop.html#toc-c42 点击左侧的大类右边的小类也跟着变化 新建provide 要改 ...
- 浅谈C# String对象
本文介绍C#中的string是一个引用类型,C# String对象是存放在堆上,而不是堆栈上的,因此,当把一个字符串变量赋给另一个字符串时,会得到对内存中同一个字符串的两个引用. AD:WOT2015 ...
- WindApi2 , WindOriginalApiLibrary 突然不兼容问题
1. 在新的电脑上从tfs拉下代码后编译, windoriginalapilibrary 这个工程弹出对话框,要求转为vs2013编译,选择同意,编译成功 2.WindApi2 的Reference列 ...
- bzoj 3653: 谈笑风生【dfs序+主席树】
考虑b的两种情况,一种是p的祖先,这种点有min(k,de[p]-1)个,然后每个这种b都有si[p]-1个c点可选: 另一种是p的子孙,要求是在p的子树内且deep在de[p]+1~de[p]+k之 ...