HDU2830--Matrix Swapping II
来源:互联网 发布:串口通信测试软件 编辑:程序博客网 时间:2024/04/30 08:30
Problem Description
Given an N * M matrix with each entry equal to 0 or 1. We can find some rectangles in the matrix whose entries are all 1, and we define the maximum area of such rectangle as this matrix’s goodness.
We can swap any two columns any times, and we are to make the goodness of the matrix as large as possible.
We can swap any two columns any times, and we are to make the goodness of the matrix as large as possible.
Input
There are several test cases in the input. The first line of each test case contains two integers N and M (1 ≤ N,M ≤ 1000). Then N lines follow, each contains M numbers (0 or 1), indicating the N * M matrix
Output
Output one line for each test case, indicating the maximum possible goodness.
Sample Input
3 41011100100013 4101010010001
Sample Output
42Note: Huge Input, scanf() is recommended.
/*此题和那个最大矩形面积其实是一样的只不过这题多了个排序。*/#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct REC{int l,r,h;}rec[1000008];//l是左边第一比他低的,r是右边第一个比他低的int h[1008][1008];int hh[1008];inline int max(int a,int b){return a>b?a:b;}bool cmp(int a,int b){return a>b?1:0;}int main(){int r,c;while(scanf("%d%d",&r,&c)==2){int maxs=0;getchar();for(int i=1;i<=r;i++){for(int j=1;j<=c;j++){h[i][j]=getchar()=='1'?h[i-1][j]+1:0;hh[j]=h[i][j];}getchar();sort(hh+1,hh+c+1,cmp);for(int j=1;j<=c;j++){rec[j].h=hh[j];}for(int j=1;j<=c;j++){if(j==1){rec[j].l=0;rec[0].h=-1;continue;}if(rec[j].h>rec[j-1].h){rec[j].l=j-1;continue;}if(rec[j].h==rec[j-1].h){rec[j].l=rec[j-1].l;continue;}if(rec[j].h<rec[j-1].h){int k=j-1;while(rec[k].h>=rec[j].h){k=rec[k].l;}rec[j].l=k;continue;}}//从左往右找一遍for(int j=c;j>=1;j--){if(j==c){rec[j].r=c+1;rec[c+1].h=-1;continue;}if(rec[j].h>rec[j+1].h){rec[j].r=j+1;continue;}if(rec[j].h==rec[j+1].h){rec[j].r=rec[j+1].r;continue;}if(rec[j].h<rec[j+1].h){int k=j+1;while(rec[j].h<=rec[k].h){k=rec[k].r;}rec[j].r=k;}}//现在已经每个矩形左边第一比他低和右边第一个比他低的都知道了//接下来是求最大面积for(int j=1;j<=c;j++){maxs=max(maxs,rec[j].h*(rec[j].r-rec[j].l-1));}}printf("%d\n",maxs);}return 0;}
- HDU2830--Matrix Swapping II
- HDU2830-Matrix Swapping II
- Matrix Swapping II hdu2830
- hdu2830 Matrix Swapping II--DP
- hdu2830 Matrix Swapping II 【dp】
- hdu2830 Matrix Swapping II(DP)
- Matrix Swapping II
- Matrix Swapping II
- Matrix Swapping II
- Matrix Swapping II
- 2830 Matrix Swapping II
- hdu 2830 Matrix Swapping II
- HDU 2830 Matrix Swapping II
- hdu 2830 Matrix Swapping II
- hdu 2830 Matrix Swapping II
- hdu 2830 Matrix Swapping II
- hdu 2830 Matrix Swapping II
- HDU 2830 Matrix Swapping II
- c++设计模式:策略模式(Strategy Pattern)
- Spring中Bean自动装配的五种模式
- 临界区(Critical Section),互斥量(Mutex),信号量(Semaphores),事件(Event) 的区别
- 360宽带测速至少在我的网络环境里有设计缺陷
- 大数据能做什么
- HDU2830--Matrix Swapping II
- Java-理论知识之关键字Volatile
- IT群侠传
- iPhone上安装Android系统详细步骤
- 揭露微软Windows Blue七大不为人知的秘密
- UVA 1396 Most Distant Point from the Sea
- 在uboot中查看uboot信息
- Java乔晓松-oracle的基本sql语句
- 一个c++程序员关于跳槽话题的随想