题意:有一个数组,压强满足一个公式:p=F/S,F是压缩力,(所有项之和),S为底面面积(最后一行项之和),求子矩阵的最强压强。
思路:这题写的时候,队友就吐槽被下面那个样例给迷惑了,其实是可以发现,单列的压强一定大于多列的,所以我们只要求一个每一列的前缀和,然后遍历来找压强最大值,即可。
代码:
#include<bits/stdc++.h>
using namespace std;
int main ()
{
ios::sync_with_stdio(false);
int t;cin>>t;
while(t--){
int sum[201][201];
int a[201][201];
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
sum[i][j]=sum[i-1][j]+a[i][j];//每一列的前缀和
}
}
double maxx=-1;
double ans=0;
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++){
ans=1.0*sum[i][j]/a[i][j];//遍历来找压强的最大值
maxx=max(maxx,ans);
}
}
printf("%.8f\n",maxx);//控制在8位小数
}
return 0;
}