首页 > 其他 > 详细

2518: 最大下降矩阵

时间:2020-10-30 22:30:36      阅读:60      评论:0      收藏:0      [点我收藏+]

2518: 最大下降矩阵

时间限制: 1 Sec  内存限制: 512 MB
http://acm.zzuli.edu.cn/problem.php?id=2518
题目描述
我们称一个矩阵是下降矩阵,当且仅当,矩阵的每一列都是严格下降的。很显然,这个要求很苛刻,大多数矩阵都无法满足。但是显然如果消去一些行,一定可以使得这个矩阵变成下降矩阵。

现在给出一个n行m列的矩阵,请你求出最少消去多少行,可以使得这个矩阵变为下降矩阵。
输入
输入第一行包含两个正整数n,m分别表示矩阵的行数和列数。(1<=n,m<=300)
接下来n行,每行有m个数,中间用空格隔开,每个数都小于2^31.
输出
输出仅包含一个整数,即最少消去的行数。
样例输入 Copy
1 3
1 2 3 
样例输出 Copy
0
提示
样例二
输入
3 1
3
1
2
输出
1

 
 
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 typedef long long ll;
 5 ll a[305][305];
 6 ll n,m,sum;
 7 ll goback[305],maxlen[305];
 8 bool ican(ll i,ll j){
 9     for(int u=1;u<=m;u++) if(a[j][u]<=a[i][u]) return false;
10     return true;
11 }
12 int main(){
13     scanf("%ld%ld",&n,&m);
14     for(int i=1;i<=n;i++)
15         for(int j=1;j<=m;j++)
16             scanf("%ld",&a[i][j]);
17     maxlen[1]=1;sum=1;
18     for(int i=1;i<=n;i++){
19         ll k=0;
20         for(int j=1;j<n;j++){
21             if(ican(i,j)){
22                 k=max(k,maxlen[j]);
23                 if(k==maxlen[j]) goback[i]=j;
24             }
25             maxlen[i]=k+1;
26             sum=max(sum,maxlen[i]);
27         }
28     }
29     //for(int i=1;i<=n;i++) printf("%ld ",maxlen[i]);
30     printf("%ld",n-sum);
31     return 0;
32 }

 

2518: 最大下降矩阵

原文:https://www.cnblogs.com/diara/p/13904062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!