hdu--2830--任意交换列的矩阵

这2天 做的都是有关矩阵的 =-=....

小小矩阵 竟然有这么多 花头...

这题 的特点是 We can swap any two columns any times 就是可以任意交换X列与Y列 任意次

一开始 我还担心我的方法 会不会tle 看到3000ms就放心了。。。我总觉得 会有更高效的方法 可惜我还没想到

我的思路 就是 假如当前第X行共Y列 高度分别是 3 4 5 2 3 6

那么高度>=2的就是6-0个  这个共6列 0可以看成是(cnt[0] + cnt[1] )之和 你可以假设我们也摆放了高度为0 与 1的柱形体0个

同理 高度>=3的就是6-1个...

那么 我就是用这个方法进行计算的 蛮简单的 就是会有一些细节注意处理就好了  如 cnt[]数组在每一行都应该重置为0 因为每行的h[]数组都是在变化的

--------------其实没那么多好扯的 =-=  我先把代码隐藏了 如果现在没做出来 可以做下看 ~

 1 #include <iostream>
 2 using namespace std;
 3
 4 const int size = 1010;
 5 char str[size];
 6 int h[size];
 7 int cnt[size];
 8
 9 int main()
10 {
11     cin.sync_with_stdio(false);
12     int n , m , ans , sum , maxH , area;
13     while( cin >> n >> m )
14     {
15         memset( cnt , 0 , sizeof(cnt) );
16         memset( h , 0 , sizeof(h) );
17         ans = 0;
18         for( int i = 1 ; i<=n ; i++ )
19         {
20             maxH = sum = 0;
21             cin >> str;
22             for( int j = 0 ; str[j]!=‘\0‘ ; j++ )
23             {
24                 if( str[j]==‘1‘ )
25                     h[j+1] ++;
26                 else
27                     h[j+1] = 0;
28                 cnt[ h[j+1] ] ++;
29                 if( maxH < h[j+1] )
30                     maxH = h[j+1];
31             }
32             for( int k = 0 ; k<=maxH ; k++ )
33             {
34                 if( cnt[k]!=0 )
35                 {
36                     area = k * (m-sum);
37                     sum += cnt[k];
38                     if( area>ans )
39                         ans = area;
40                 }
41                 cnt[k] = 0;
42             }
43         }
44         cout << ans << endl;
45     }
46     return 0;
47 }

hdu--2830--任意交换列的矩阵

时间: 2024-10-25 22:22:59

hdu--2830--任意交换列的矩阵的相关文章

HDU 2830 Matrix Swapping II (DP,最大全1矩阵)

题意  给你一个n*m矩阵  每列都可以随便交换位置   求最优交换后最大的全1子矩阵 又是HDU 1505 1506的变种  但这个更容易了  因为每列都可以交换位置了   那么这一行中所有比i高的都可以与i相邻了  只需要统计这一行有多少个比i高就行了   可以在算出每一行后  把高度大的放前面去  用num[i]记录排序后的列原来的数  这样就有j列比h[i][num[j]]高了  最后的答案也就是max(j*h[i][num[j]]) #include<cstdio> #include

HDU 2830 Matrix Swapping II (最大完全子矩阵之可移动列)

Matrix Swapping II Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1210    Accepted Submission(s): 804 Problem Description Given an N * M matrix with each entry equal to 0 or 1. We can find som

HDU 2830 Matrix Swapping II (预处理的线性dp)

Matrix Swapping II Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1430    Accepted Submission(s): 950 Problem Description Given an N * M matrix with each entry equal to 0 or 1. We can find som

HDU 2830 Matrix Swapping II

给一个矩阵,依然是求满足条件的最大子矩阵 不过题目中说任意两列可以交换,这是对题目的简化 求出h数组以后直接排序,然后找出(col-j)*h[j]的最大值即可(这里的j是从0开始) 因为排序会影响到h数组下一行的求解,所以将h数组中的元素复制到temp数组中去,再排序 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 #include <algori

hdu 2830 Matrix Swapping II(额,,排序?)

题意: N*M的矩阵,每个格中不是0就是1. 可以任意交换某两列.最后得到一个新矩阵. 问可以得到的最大的子矩形面积是多少(这个子矩形必须全是1). 思路: 先统计,a[i][j]记录从第i行第j列格往上连续的0的个数. 枚举每一行作为答案子矩阵的底, 然后将这一行的a[i][j]从大到小排序,扫一遍计算. 看代码. 代码: int n,m; char temps[1005][1005]; int a[1005][1005]; int ts[1005]; bool cmp(int a,int b

HDU 2157 How many ways??:矩阵快速幂【i到j共经过k个节点的方法数】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2157 题解: 给你一个有向图,n个节点m条边,问你从i到j共经过k个节点的方法数(不算i点). 题解: 先用邻接矩阵存图. 假设k = 2,那么从i到j的方法数 = ∑ way[i][x] * way[x][j] (0<=x<n && x!=i && x!=j) 诶?快看,那是矩阵乘法! 设邻接矩阵为A,若i到j有边则val[i][j] = 1. k = 2时答案矩

hdu 2830 Matrix Swapping II dp 动态规划

//这题和之前的2870题意相似,不过多了可以任意交换两列的功能 //先开始没看见能交换两列...结果裸的样例都没过,最后想了想//任意交换两列,那我们就可以直接对第i行第j列得到的cnt[i][j] //这一行惊醒排序就可以了,其中cnt[i][j]表示前i行第j列有多少 //个相同的1,进行降序排序得到a[j],那么a[j]*j的最大值就是我 //们所要的答案,因为j前面的肯定是高于j的. //注释部分是我之前的2870的裸的代码,具体可以看我的博客dp46道专题  //哎,继续练吧...

HDU 4965 Fast Matrix Calculation 【矩阵】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4965 题目大意:给你一个N*K的矩阵A以及一个K*N的矩阵B (4 <= N <= 1000)以及 (2 <=K <= 6),然后接下来四步: 算一个新的矩阵C=A*B 算M=C^ (N*N) 对于M中的每个元素%6 将M中每个元素加起来,算出和. 也就是求出A*B * A*B * A*B * A*B * A*B *--* A*B   但是A*B形成的矩阵是N*N,而N大小有可能是10

HDU 5171 GTY&#39;s birthday gift 矩阵快速幂

点击打开链接 GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 225    Accepted Submission(s): 78 Problem Description FFZ's birthday is coming. GTY wants to give a gift to ZZF. He as