题目:最大加权矩形

题目描述

给定一个正整数n( n<=100),然后输入一个N*N矩阵。求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于[-127,127]
例:
0 –2 –7 0 在左下角: 9 2
9 2 –6 2 -4 1
-4 1 –4 1 -1 8
-1 8 0 –2 和为15

输入格式

第一行:n,接下来是n行n列的矩阵。

输出格式

最大矩形(子矩阵)的和。

 

 

 

题解:

用动态规划求最大加权矩形问题。

代码实现:

#include<iostream>
using namespace std;

int f[101][101]={0},n;

int main()
{
    int i,j,k,l;
    cin>>n;
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    cin>>f[i][j];
    
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    f[i][j]+=f[i-1][j];
    
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    f[i][j]+=f[i][j-1];
    
    int max=-100000;
    for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
    for(k=1;k<=n;k++)
    for(l=1;l<=k;l++)
    if(f[i][k]-f[j-1][k]-f[i][l-1]+f[j-1][l-1]>max) 
    max=f[i][k]-f[j-1][k]-f[i][l-1]+f[j-1][l-1];
    
    cout<<max<<endl;
    return 0;
    
    }
posted on 2012-01-16 23:11  怡红公子  阅读(530)  评论(0编辑  收藏  举报