题意:一个N * N的矩阵,求子矩阵的最大和(N <= 100, -127 <= 矩阵元素 <= 127)。

题目链接:http://poj.org/problem?id=1050

——>>将二维压缩为一维。对一维进行dp求解。

将二维压缩成一维:

1、第1行

2、第2行加第1行

3、第3行加第2行加第1行

……

N、第N行加第N-1行加……加第1行

1、第2行

2、第3行加第2行

……

1、第N行

对于一维情况。设dp[i]表示以第i个元素结尾的最大连续和,则状态转移方程为:

dp[i] = max(nBuf[i], dp[i - 1] + nBuf[i]);

加上滚动数组思想优化空间。。

总时间复杂度:O(N ^ 3)

#include <cstdio>
#include <cstring>
#include <algorithm> using std::max; const int MAXN = 100 + 1;
const int INF = 0x3f3f3f3f; int N;
int nMatrix[MAXN][MAXN]; void Read()
{
for (int i = 1; i <= N; ++i)
{
for (int j = 1; j <= N; ++j)
{
scanf("%d", &nMatrix[i][j]);
}
}
} void Dp()
{
int nRet = -INF;
int nBuf[MAXN]; for (int i = 1; i <= N; ++i)
{
memset(nBuf, 0, sizeof(nBuf));
for (int j = i; j <= N; ++j)
{
for (int k = 1; k <= N; ++k)
{
nBuf[k] += nMatrix[j][k];
} int dp = 0;
for (int k = 1; k <= N; ++k)
{
dp = max(nBuf[k], dp + nBuf[k]);
nRet = max(nRet, dp);
}
}
} printf("%d\n", nRet);
} int main()
{
while (scanf("%d", &N) == 1)
{
Read();
Dp();
} return 0;
}

poj - 1050 - To the Max(dp)的更多相关文章

  1. poj - 1953 - World Cup Noise(dp)

    题意:n位长的01序列(0 < n < 45),但不能出现连续的两个1,问序列有多少种. 题目链接:id=1953" target="_blank">h ...

  2. poj 1050 To the Max (简单dp)

    题目链接:http://poj.org/problem?id=1050 #include<cstdio> #include<cstring> #include<iostr ...

  3. poj 1050 To the Max(线性dp)

    题目链接:http://poj.org/problem?id=1050 思路分析: 该题目为经典的最大子矩阵和问题,属于线性dp问题:最大子矩阵为最大连续子段和的推广情况,最大连续子段和为一维问题,而 ...

  4. POJ 2168 Joke with Turtles(DP)

    Description There is a famous joke-riddle for children: Three turtles are crawling along a road. One ...

  5. POJ 1485:Fast Food(dp)&& 面试题

    题目链接 题意 给出 n 个餐厅,m 个停车场,现在要将 n 个餐厅中的 m 个变成停车场,使得每个餐厅到最近的停车场的距离之和最短,输出哪个餐厅变成停车场和它服务哪些餐厅,还有最短距离之和. 思路 ...

  6. POJ 2533——Longest Ordered Subsequence(DP)

    链接:http://poj.org/problem?id=2533 题解 #include<iostream> using namespace std; ]; //存放数列 ]; //b[ ...

  7. 【POJ 3176】Cow Bowling(DP)

    题 Description The cows don't use actual bowling balls when they go bowling. They each take a number ...

  8. HDU 1081 To The Max (dp)

    题目链接 Problem Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

  9. 【POJ】3616 Milking Time(dp)

    Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10898   Accepted: 4591 Des ...

随机推荐

  1. spark中的广播变量broadcast

    Spark中的Broadcast处理 首先先来看一看broadcast的使用代码: val values = List[Int](1,2,3) val broadcastValues = sparkC ...

  2. Android接口和框架学习

    Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer.硬件抽象层 CTS:CompatibilityTest Suite,兼容性測试套件 Android让你 ...

  3. codeforces Towers 题解

    Little Vasya has received a young builder's kit. The kit consists of several wooden bars, the length ...

  4. HDU 1874 畅通project续 (最短路径)

    畅通project续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. Codeves 2800 送外卖 状态压缩DP+floyd

    送外卖     题目描述 Description 有一个送外卖的,他手上有n份订单,他要把n份东西,分别送达n个不同的客户的手上.n个不同的客户分别在1~n个编号的城市中.送外卖的从0号城市出发,然后 ...

  6. 对于NAS,IP SAN以及iSCSCI SAN存储的一些认识和理解

    一直以来用户对于在选购存储产品上有许多不清楚,市场上有NAS, FC SAN,IP SAN和iSCSCI SAN产品,到底哪种类型的产品更适合支撑企业的应用系统呢? 我们经常可以听到用户讲: “NAS ...

  7. 杂项-报表:Formula One(Active电子表格控件)

    ylbtech-杂项-报表:Formula One(Active电子表格控件) Formula One是一款应用软件,是由Visual Components公司开发的基于Windows平台的.类似于E ...

  8. 11.MATLAB基本编程

    概述: 1 脚本M文件 clear all; %设置精度 format long; %定义变量 n= s= %循环 :n s=s+/^i; end s format short; 2 函数M文件 fu ...

  9. tomcat指定JDK版本

    在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat. 在启动时,startup. ...

  10. js通过经纬度计算两点之间的距离

    最近这几天在做地图的时候,获取到目的地经纬度和当前所在位置的经纬度,通过这几个参数,用js代码就能获取到这两点之间的直线距离: function (lat1, lng1, lat2, lng2) { ...