题目源地址:http://ac.jobdu.com/problem.php?pid=1102
C++代码:
#include <stdio.h>
#define MAXN 110
#define INF 1000000000
int mat[MAXN][MAXN];
int n,m,k;
int bc(int a,int b,int c){
int ret=0,i;
for(i=a;i<=b;i++)
ret+=mat[i][c];
return ret;
}
int main(){
int i,j,l,x,flag,t_size,c_size,ans,sum;
while(scanf("%d%d%d",&n,&m,&k)==3){
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&mat[i][j]);
ans=INF,flag=0;
for(i=0;i<n;i++)
for(j=i;j<n;j++){
t_size=j-i+1;
for(l=0;l<m;l++){
sum=0;
c_size=0;
for(x=l;x<m;x++){
sum+=bc(i,j,x);
c_size+=t_size;
if(sum>=k){
if(c_size<ans) ans=c_size;
flag=1; break;
}
}
}
}
if(flag==1) printf("%d\n",ans);
else printf("-1\n");
}
return 0;
}