哥谭怪瘦 2023-02-21 20:28 采纳率: 50%
浏览 35
已结题

最大子矩阵问题 我用的暴力做法 不知道哪里出问题了

img


#include<stdio.h>
#include<algorithm>
using namespace std;
int s[1005];
int arr[1005][1005];
int sum(int e,int r,int x,int y){
    int count=0;
    for(int i=e;i<e+x;i++){
        for(int j=r;j<r+y;j++){
            count+=arr[i][j];    //求矩阵和 
        }
    }
    return count;//将矩阵和返回给数组 
}
int main()
{
    int m,n,x,y,a;
    scanf("%d",&a);
    while(a--){
        scanf("%d %d %d %d",&m,&n,&x,&y);
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                scanf("%d",&arr[i][j]);
            }
        }
        int e=0,r=0,w=0;
        while(e+x-1!=m&&r+y-1!=n){
            s[w++]=sum(e,r,x,y);
            if(r+y-1!=m) r++;//判断横边界 
            else if(r+y-1==m&&e+x-1!=n){//判断纵边界 
                r=0,e++;
            }
        }
        sort(s,s+w);//排序找最大的矩阵和 
        printf("%d\n",s[w-1]);
    } 
    return 0;
}





  • 写回答

3条回答 默认 最新

  • ksgpjhqf 2023-02-22 00:01
    关注

    你的s数组有可能溢出
    不暴力的方法

    
    #include<stdio.h>
    
    int arr[1005][1005]={0};
    //arr[i][j]表示矩阵前i行与前j列组成的子矩阵的和,此处不初始化对结果无影响 
    
    int main(){
        int m,n,x,y,T,i,j,max,temp;
        scanf("%d",&T);
        while(T--){
            max=0;
            scanf("%d%d%d%d",&m,&n,&x,&y);
            for(i=1;i<=m;i++){
                for(j=1;j<=n;j++){
                    scanf("%d",&arr[i][j]);
                    arr[i][j]+=arr[i][j-1]; 
                }
                for(j=1;j<=n;j++){
                    arr[i][j]+=arr[i-1][j];
                } 
            }
            for(i=0;i<m-x;i++){
                for(j=0;j<n-y;j++){
                    temp=arr[i+x][j+y]+arr[i][j]-arr[i][j+y]-arr[i+x][y];
                    if(max<temp)max=temp;
                }
            }
            printf("%d\n",max);
        } 
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 创建了问题 2月21日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效