【NOIP2016提高A组模拟10.15】最大化
来源:互联网 发布:北斗卫星软件 编辑:程序博客网 时间:2024/04/27 21:06
【NOIP2016提高A组模拟10.15】最大化
(File IO): input:max.in output:max.out
Time Limits: 1000 ms Memory Limits: 524288 KB
Description
Input
Output
Sample Input
3 24 0-10 8-2 -2
Sample Output
4
Data Constraint
解题思路
题目大意就是让你求满足和大于0的矩阵最大面积,
80分:暴力+二维前缀和
O(n^4)常数较小
100分:
枚举所选取的矩形的上界和下界
那么就可以将整一个矩阵缩成一个序列,我们规定这个序列前i位的和为sumi
只有j < i,sumi>sumj,(j,i]这个区间的矩阵就可以取,那么我们可以对j,k(j>k)两个位置进行思考:
若sumk<=sumj,那么j位置的效力不如k这个位置,没必要保留j
若sumk>sumj,那么如果存在l > j,suml<=sumk,suml>sumj,这样j是可以保留的
如果你现在搜到一个位置i,前面有两个位置x,y(x < y), sumi > sumx , sumi > sumy,那么我们会去(x,i]这个区间而不是(y,i],这样的话只要保留一个序列q,满足(i
#include<cstdio>#include<cstring>using namespace std;int n,m,ans=0,top;long long f[301][301],q[302][3];int Get(int x,int y){ int ans=0; top=1; q[1][1]=0; q[1][2]=0; for(int i=1;i<=m;i++) { long long s=f[y][i]-f[x-1][i]; if(s<q[top][1]) { q[++top][1]=s; q[top][2]=i; } int h=1,t=top,w=top; while(h<=t) { int m=(h+t)>>1; if(q[m][1]>=s) { h=m+1; }else { t=m-1; w=m; } } w=int(q[w][2]); int temp=(i-w)*(y-x+1); if(temp>ans)ans=temp; } return ans;}int main(){ freopen("max.in","r",stdin); freopen("max.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%lld",&f[i][j]); f[i][j]+=f[i][j-1]+f[i-1][j]-f[i-1][j-1]; } for(int i=1;i<=n;i++) for(int j=1;j<=n-i+1;j++) { int x=Get(j,j+i-1); if(x>ans)ans=x; if(i*n<=ans)break; } printf("%d",ans);}
0 0
- 【NOIP2016提高A组模拟10.15】最大化
- 【NOIP2016提高A组模拟10.15】最大化
- 【NOIP2016提高A组模拟10.15】最大化
- {题解}[jzoj4820]【NOIP2016提高A组模拟10.15】最大化
- JZOJ [4820]. 【NOIP2016提高A组模拟10.15】最大化
- 【JZOJ4820】【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4820. 【NOIP2016提高A组模拟10.15】最大化
- JZOJ 4820 【NOIP2016提高A组模拟10.15】最大化
- jzoj 4820. 【NOIP2016提高A组模拟10.15】最大化 动态规划+单调队列+二分
- 【NOIP2016提高A组模拟10.15】打膈膜
- 【NOIP2016提高A组模拟10.15】打膈膜
- NOIP2016提高A组模拟10.15总结
- 打膈膜 【NOIP2016提高A组模拟10.15】
- 【NOIP2016提高A组模拟10.15】打膈膜
- JZOJ 4819. 【NOIP2016提高A组模拟10.15】算循环
- JZOJ 4819 【NOIP2016提高A组模拟10.15】算循环
- 【NOIP2016提高A组模拟10.15】算循环
- 【NOIP2016提高A组模拟10.15】算循环
- 去掉反斜杠
- java内部类注意事项
- 在JSP中使用Integer.parseInt()报错的问题
- 十六进制颜色码图片大全
- 表单的method特性
- 【NOIP2016提高A组模拟10.15】最大化
- linux应用编程--简单常用函数
- 去掉字体加粗的实现
- hadoop3.0 分布式搭建/安装
- val设置获取属性值+each数组遍历
- 3415: Poi2013 Price List
- PHP使用array_intersect()函数求数组交集
- 带着实例继续学习(4):下拉框数据填充、组件生命周期、动态绑定事件
- C++11 (一)