一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
- 题目描述:
-
一个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
首先这个题应该是有一个动态规划的解法,不过好像复杂度也要到O(n^3logn),所以这里直接暴力了。但是为了节省时间首先计算出从左上角开始的矩阵的和,然后根据这个和可以求各个矩阵的值
//计算左上角为(1,1)的所有子矩阵的和,需要O(N^2)的时间。
//此时只需要O(1)的时间就可以算出每个子矩阵的和。
//枚举次数依然不变。总时间复杂度为O(N^4)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
//freopen("t","r",stdin);
int m,n,k;
while(cin>>m>>n>>k){
int ma[][];
for(int i=;i<m;i++){
for(int j=;j<n;j++){
cin>>ma[i][j];
}
}
int sum[][];
memset(sum,,sizeof(sum));
sum[][]=ma[][];
for(int i=;i<m;i++){
sum[i][]=ma[i][]+sum[i-][];
}
for(int i=;i<n;i++){
sum[][i]=ma[][i]+sum[][i-];
}
for(int i=;i<m;i++){
for(int j=;j<n;j++){
sum[i][j]+=sum[i][j-];
for(int k=;k<=i;k++){
sum[i][j]+=ma[k][j];
}
}
} int minsize=;
for(int a=;a<m;a++){
for(int b=a;b<m;b++){
for(int c=;c<n;c++){
for(int d=c;d<n;d++){
int s=;
if(a==&&b==&&c==&&d==){
s=sum[][];
}
else if(a==&&c==){
s=sum[b][d];
}
else if(a==){
s=sum[b][d]-sum[b][c-];
}
else if(c==){
s=sum[b][d]-sum[a-][d];
}
else{
s=sum[b][d]+sum[a-][c-]-sum[a-][d]-sum[b][c-];
}
if(s>=k){
int sizee=(b-a+)*(d-c+);
if(minsize>sizee){
minsize=sizee;
}
}
}
}
}
}
if(minsize==){
cout<<-<<endl;
}
else{
cout<<minsize<<endl;
}
}
return ;
}
一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵的更多相关文章
- 找出sql脚本中需要创建的表空间名称和数据库用户名
测试的工作中,经常会遇到项目交接或者搭建一个新的测试环境,而创建oracle数据库用户及表空间时,需要提前找出脚本中的 数据库用户名和表空间名,所以自己写了一个python脚本,自动找出sql脚本中的 ...
- [原]Java面试题-输入一个整型数组,找出最大值、最小值,并交换。
[Date]2013-09-19 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Content]: 1.面试题 输入一个整型 ...
- 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 print-all-combinations-of-given-length
// 给定一个set字符和一个正数k,找出所有该做set它可以由长度构成k该字符串集合 /* Input: set[] = {'a', 'b'}, k = 3 Output: aaa aab aba ...
- 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- delphi程序向另一个可执行程序发消息(使用GetForegroundWindow; 找出当前操作系统中活动的第一个窗口)
function FindWindowThroughWindowText(WindowText: string): THandle;var hCurrentWindow: THandle; cnt ...
- LeetCode 5071. 找出所有行中最小公共元素(Java)
题目:5071. 找出所有行中最小公共元素 给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1 ...
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
随机推荐
- Java研发方向如何准备BAT技术面试答案(上)
http://blog.csdn.net/q979392157/article/details/52164319 阿里面试题总结 http://blog.csdn.net/q979392157/art ...
- iOS10遇到有推送的Demo真机报错的解决
1.打开project.pbxproj,搜com.apple.Push 改成enabled = 0(在projectName.xcodeproj文件上右键"显示包内容",用文本编辑 ...
- eclipse添加js,html,jsp编辑输入补充提示
1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:zj ...
- java 对象入门
对象的五大特征 (1)所有东西都是对象.可将对象想象成一种新型变量;它保存着数据,但可要求对自身进行操作.理论上讲, 可从要解决的问题身上提出所有概念性的组件,然后再程序中将其表达为一个对象. (2) ...
- hackerrank Similar Pair
传送门 Problem Statement You are given a tree where each node is labeled from 1 to n. How many similar ...
- jedis池的作用
一.jedis池的介绍 相信大家都用过线程池或者是jdbc的连接池,使用池可以减少系统在使用所需对象时创建对象的开销,从而提高系统性能和效率.jedis池也是如此,那么我们该如何使用jedis池呢? ...
- 前端MVC框架、类库、UI框架选择
CSS预处理器sass(基于Ruby服务端版)less(客户端版:基于js; 服务端版:基于nodejs) 前端UI框架JqueryMiniUI: http://www.miniui.com/(适用于 ...
- Linux字符集的查看及修改
一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...
- 什么叫session和cookie-及其设置
http的无状态? 保持状态, 是指当程序关闭后重启, 上一次操作的历史还能继续, 保持的. 如word中的 "选项"设置. 如windows系统的设置等等. http的设计目的, ...
- ActiveMQ的静态网络链接
-------------------------------------------------------------------- (1)ActiveMQ的networkConnector是什么 ...