1102.最小子面积矩阵

题目描述:

一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵(矩阵中元素个数为矩阵面积)

输入:

每个案例第一行三个正整数N,M<=100,表示矩阵大小,和一个整数K
接下来N行,每行M个数,表示矩阵每个元素的值

输出:

输出最小面积的值。如果出现任意矩阵的和都小于K,直接输出-1。

样例输入:
4 4 10
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出:
1
#include<iostream>
using namespace std;

int main(){
    int n,m,k;
    while(cin>>n>>m>>k)
    {
        int ans=10001;
        int a[101][101]={0};
        int i,j,p,q;
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                cin>>a[i][j];
            }
        }
        int sum=0;
        for(i=0;i<n;i++){
            for(j=0;j<m;j++){
                for(p=i;p<n;p++){
                    for(q=j;q<m;q++){
                        int temp=(i-p+1)*(j-q+1);
                        if(temp>ans) continue;
                        sum=0;
                        for(int c=p;c<=i;c++){
                            for(int d=q;d<=j;d++){
                                sum+=a[c][d];
                            }
                        }
                        if(sum>k && ans>temp)
                        {
                            ans=temp;
                        }
                    }
                }
            }
        }
        if(ans==10001) cout<<"-1"<<endl;
        else cout<<ans<<endl;
    }
    return 0;
} 

 

posted @ 2018-10-02 10:29  bernieloveslife  阅读(597)  评论(0编辑  收藏  举报