• HDU 1081 To The Max


    求子矩阵的最大和

    对于样例:

    0  -2  -7  0
    9  2   -6  2
    -4  1       -4      1
    -1  8        0     -2

    其最大子矩阵为

    9 2
    -4 1
    -1 8

    这个子矩阵的和为15

    想明白后,这是个最大连续子序列的变形

    sum[k]存放的是矩阵中第k列从第i行到第j行的和

    每次求出sum数组的最大连续子序列,就是求得第i行到第j行的最大子矩阵

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 using namespace std;
     6 
     7 int dp[105], sum[105];
     8 int data[105][105];
     9 
    10 int main(void)
    11 {
    12     #ifdef LOCAL
    13         freopen("1081in.txt", "r", stdin);
    14     #endif
    15 
    16     int n;
    17     while(scanf("%d", &n) == 1)
    18     {
    19         int i, j, k;
    20         int ans = -1000;
    21         for(i = 0; i < n; ++i)
    22             for(j = 0; j < n; ++j)
    23                 scanf("%d", &data[i][j]);
    24 
    25         for(i = 0; i < n; ++i)
    26         {
    27             memset(sum, 0, sizeof(sum));
    28             for(j = i; j < n; ++j)
    29             {
    30                 for(k = 0; k < n; ++k)
    31                     sum[k] += data[j][k];
    32                 dp[0] = sum[0];
    33                 for(k = 1; k < n; ++k)
    34                 {
    35                     if(dp[k - 1] > 0)
    36                         dp[k] = dp[k - 1] + sum[k];
    37                     else
    38                         dp[k] = sum[k];
    39                     if(dp[k] > ans)
    40                         ans = dp[k];
    41                 }
    42             }
    43         }
    44 
    45         printf("%d
    ", ans);
    46     }
    47     return 0;
    48 }
    代码君

    小结:

    这个算法里面还是有很多重复计算的部分,可以考虑将data[i][j]中存放矩阵中第j列前i行的和

    再计算sum[k]的时候,

    sum[k] = data[j][k] - data[i][k];

  • 相关阅读:
    硬件重定向
    ARM处理器模式切换(含MRS,MSR指令)
    ARM处理器工作模式
    ARM处理器异常处理
    JS和H5做一个音乐播放器,附带源码
    php页面zend加密乱码的解决办法
    ZendOptimizer怎么安装?Php网站打开显示乱码
    PHP和Python如何选择?或许可以考虑这三个问题
    SQL Server 2008读书笔记(3):表
    Dijkstra算法
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3871221.html
Copyright © 2020-2023  润新知