[POJ1050]To the Max (矩阵,最大连续子序列和)

数据弱,暴力过

题意

N^N的矩阵,求最大子矩阵和

思路

悬线?不需要。暴力+前缀和过

代码

//poj1050
//n^4暴力
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 105
#define INF 0x3fffffff
using namespace std;
int a[N][N];
int sum[N];
int ans;
int main()
{
    int n; scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            scanf("%d", &a[i][j]);
    for (int i = 1; i <= n; i++) {
        memset(sym, 0, sizeof(sum));
        for (int j = i; j <= n; j++) {
            int num = 0;
            for (int k = 1; k <= n; k++) {
                num += sum[k] += a[j][k];
                ans = max(ans, num);
                if (num < 0) num = 0;
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}

PS:VS编译坏了,伤心!

原文地址:https://www.cnblogs.com/lincold/p/10162287.html

时间: 2024-11-07 07:47:25

[POJ1050]To the Max (矩阵,最大连续子序列和)的相关文章

HDU 1003 Max Sum 最大连续子序列的和

Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input contains

杭电1003 Max Sum 【连续子序列求最大和】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目意思: 即给出一串数据,求连续的子序列的最大和 解题思路: 因为我们很容易想到用一个max来存放找到的子序列的和中的最大值,通过不断比较,对max的值进行更新,最后我们就能够得到最大子序列的和,于是很容易想到用暴力搜索,见上一篇博客,这样的时间复杂度为O(n^3),是超时的. 又因为想到只要一个数不是负数,不管它再小,加上去也是会使和变大的,所以我们需要用另一个变量来判断即将要加上的一个

HDU 1081 To the Max 最大子矩阵(动态规划求最大连续子序列和)

Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. I

最大连续子序列&amp;&amp;MAX SUM

//错的莫名其妙的O w O 第二个的格式也是莫名其妙的 Input测试输入包含若干测试用例,每个测试用例占2行,第1行给出正整数K( < 10000 ),第2行给出K个整数,中间用空格分隔.当K为0时,输入结束,该用例不被处理. Output对每个测试用例,在1行里输出最大和.最大连续子序列的第一个和最后一个元 素,中间用空格分隔.如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2.3组).若所有K个元素都是负数,则定义其最大和为0,输出整个序列的首尾元素. Sample

HDU ACM 1024 Max Sum Plus Plus -&gt;最大连续子序列和的增强版

#include<iostream> #include<limits.h> using namespace std; #define N 1000005 int a[N],dp[N],maxpre[N]; int max(int a,int b) { return a>b?a:b; } int main() { int i,j,n,m,tmp; while(scanf("%d%d",&m,&n)==2) { for(i=1;i<=n;

HDU 1003 Max Sum &amp;&amp; HDU 1231 最大连续子序列 (DP)

Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 154155    Accepted Submission(s): 35958 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max su

HDU 1003 Max Sum(dp,最大连续子序列和)

Max Sum Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input

hdu1003 Max Sum【最大连续子序列之和】

题目链接:https://vjudge.net/problem/HDU-1003 题目大意:给出一段序列,求出最大连续子序列之和,以及给出这段子序列的起点和终点. 解题思路:最长连续子序列之和问题其实有很多种求解方式,这里是用时间复杂度为O(n)的动态规划来求解. 思路很清晰,用dp数组来表示前i项的最大连续子序列之和,如果dp[i-1]>=0的话,则dp[i]加上dp[i-1]能够使dp[i]增大:若dp[i-1]<0的话,则重新以dp[i]为起点,起点更新. #include <cs

阿里笔试题:求两个子序列的最大连续子序列

原题例如以下: 给定一个query和一个text,均由小写字母组成.要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度.比如.query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此.返回结果应该为其长度3.请注意程序效率. 解题方法一: 和字符串匹配一样(http://blog.csdn.net/sinat_24520925/articl