【動態規劃】最大加權矩形
来源:互联网 发布:下载录音软件 编辑:程序博客网 时间:2024/05/18 02:49
题目描述给定一个正整数n( n<=100),然后输入一个N*N矩阵。求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于[-127,127]例:0 –2 –7 0 在左下角: 9 29 2 –6 2 -4 1-4 1 –4 1 -1 8-1 8 0 –2 和为15输入格式第一行:n,接下来是n行n列的矩阵。输出格式最大矩形(子矩阵)的和。样例输入4 0 –2 –7 0 9 2 –6 2 -4 1 –4 1 –1 8 0 –2样例输出15
最大子矩形問題,類似於吃西瓜。
ACCode:
#include <cstdio>#include <cstring>#include <cstdlib>#include <bitset>using std::max;const char fi[] = "rqnoj106.in";const char fo[] = "rqnoj106.out";const int maxN = 110;const int MAX = 0x3fffff00;const int MIN = -MAX;int sum[maxN][maxN];int w[maxN][maxN];int n, ans; void init_file() { freopen(fi, "r", stdin); freopen(fo, "w", stdout); } void readdata() { scanf("%d", &n); for (int i = 1; i < n + 1; ++i) for (int j = 1; j < n + 1; ++j) scanf("%d", &w[i][j]); } void work() { for (int i = 1; i < n + 1; ++i) for (int j = 1; j < n + 1; ++j) sum[i][j] = sum[i - 1][j] + w[i][j]; ans = 0; for (int i1 = 0; i1 < n; ++i1) for (int i2 = i1 + 1; i2 < n + 1; ++i2) { int Max = sum[i2][1] - sum[i1][1]; int tmp = Max; for (int j = 2; j < n + 1; ++j) { tmp = max(0, tmp); tmp += sum[i2][j] - sum[i1][j]; Max = max(Max, tmp); } ans = max(Max, ans); } printf("%d", ans); } int main(){ init_file(); readdata(); work(); exit(0);}
- 【動態規劃】最大加權矩形
- 最大矩形
- LintCode-最大正方形&最大矩形
- 最大子矩形
- xjoj325最大矩形
- 最大矩形面积问题
- 【最大子矩形】糖果盒
- 【最大子矩形】面积
- 【最大子矩形】面积
- POJ2559 最大矩形面积
- POJ2082 最大矩形面积
- 求最大矩形面积
- 直方图最大面积矩形
- POJ 2559 最大矩形。。
- 得到最大矩形
- 最大的矩形
- 讨厌的最大矩形
- 柱状图最大矩形问题
- ssh&scp用法
- 第一个Android (HelloWord)工程目录结构介绍
- CSS 伪类与伪元素
- Rails 根据模板生成pdf 报告
- Android4.0新特性
- 【動態規劃】最大加權矩形
- Servlet的生命周期
- hdu1709 the blance
- LINUX学习笔记3——TFTP服务器
- 微软VC++ 编译器选项
- 8岁儿子编写的第一个程序—三个数的混合运算
- 开启Fedroa15中自带的SMB服务
- Android中内容观察者的使用---- ContentObserver类详解
- [USACO 1.3] Summary of Section 1.3