1. 程式人生 > >Uva 108 Maximum Sum

Uva 108 Maximum Sum

題目連結:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=44 題目:附件 題意: 與最大子序列和相近,求一個矩陣的最大子矩陣和。 題解: 用兩個迴圈來控制左右兩個邊界,然後將其和相加,作為一個一維序列,求其最大子序列和。
將第i列到第j列之間的每一行相加之後作為一個一維序列,求其最大子序列和。 需要在開始初始化求出每一行的前i行的和,然後迴圈是之間用sum[k][j]-sum[k][i-1]即為每行的和。 程式碼:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX=100+5;
int a[MAX][MAX],sum[MAX][MAX];
int n;
void init()
{
    memset(sum,0,sizeof(sum));
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            sum[i][j]=sum[i][j-1]+a[i][j];
        }
    }
}
int main()
{
    while(cin>>n)
    {
        int Max=-127;
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
                cin>>a[i][j];
                Max=max(Max,a[i][j]);//全為負數的情況取一個最大值
            }
        init();
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            for(int j=i; j<=n; j++)
            {
                int mmax=0,thissum=0;
                for(int k=1; k<=n; k++)
                {
                    int s=sum[k][j]-sum[k][i-1];
                    thissum+=s;
                    if(thissum>mmax)
                        mmax=thissum;
                    else if(thissum<0)
                        thissum=0;
                }
                ans=max(mmax,ans);
            }
        }
        if(ans==0) ans=Max;
        cout<<ans<<endl;
    }
    return 0;
}


相關推薦

Uva 108 Maximum Sum

題目連結:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem

Maximum sum-動態規劃

ddl border 數組 clear fonts nts input gree img A - Maximum sum Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d

poj 2479 Maximum sum(遞推)

宋體 思路 freopen sim ace [1] clu mat while ?? 題意:給定n個數,求兩段連續不重疊子段的最大和。 思路非常easy。把原串劃為兩段。求兩段的連續最大子串和之和,這裏要先預處理一下,用lmax數組表示1到i的最大連續子串和,用rmax

689. Maximum Sum of 3 Non-Overlapping Subarrays

then sub lis .com this phi multiple dice start Max Sum of Subarray with size k, 相當於Easy難度,我說用一個sum array存sum,然後做減法就行。中國小哥說讓優化空間,於是說可以只用兩個

[LeetCode] Maximum Sum of 3 Non-Overlapping Subarrays 三個菲重疊子數組的最大和

turn array pin could plan swe ogr ppi etc In a given array nums of positive integers, find three non-overlapping subarrays with maximu

689. Maximum Sum of 3 Non-Overlapping Subarrays三個不重合數組的求和最大值

題目 分鐘 為什麽 lex OS star nat fin 空間分析 [抄題]: In a given array nums of positive integers, find three non-overlapping subarrays with maximum su

maximum sum of a subarray with at-least k elements.

ane rst tps required imu tor http from lar // Returns maximum sum of a subarray with at-least // k elements. static int ma

[LeetCode] 689. Maximum Sum of 3 Non-Overlapping Subarrays 三個非重疊子數組的最大和

lee i+1 multi ssi push_back 數字 imu ant cnblogs In a given array nums of positive integers, find three non-overlapping subarrays with maxi

cf Maximum Sum of Digits

n) urn -o while 最大 nbsp 的確 git print 貪心,找到最大的小於n的999999,就是n1,然後n2=n-n1 這兩個就是最佳分配。 原因: 從99...99+x=n出發,如果99..9減去某個數,比如342,那麽s(99..9)會減少s(

codeforces 1060b Maximum Sum of Digits(思維題)

You are given a positive integer n Let S(x) be sum of digits in base 10 representation of x, for example, S ( 123 S(123)=1+2+3=6, S(0)=0.

CodeForces - 1060B F - Maximum Sum of Digits

題目連結 題意:輸入C,找出A,B使得A,B的各個位數字和最大。 #include<cstdio> #include<cstdlib> #include<algorithm> #include<iostream> #include<mat

【 CodeForces - 1060B 】Maximum Sum of Digits(思維,構造)

題幹: You are given a positive integer nn. Let S(x)S(x) be sum of digits in base 10 representation of xx, for example, S(

Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2) B. Maximum Sum of Digits

傳送門   題目大意就是給一個數c,然後拆成a和b,使得a+b=c,要求使得a的各數位之和+b的各數位之和達到最大。   我的想法就是可能不能單獨考慮a的數位之和或b的數位之和,要綜合考慮才能達到最優,先來看ci,ci=ai+b+flag的,這裡的flag是前一位(較

LeetCode周賽#105 Q2 Maximum Sum Circular Subarray (最大連續子列和變形題)

題目來源:https://leetcode.com/contest/weekly-contest-105/problems/maximum-sum-circular-subarray/ 問題描述 918. Maximum Sum Circular Subarray Given a&nbs

CodeForces 1060 B Maximum Sum of Digits

Maximum Sum of Digits   You are given a positive integer n.   Let S(x)S(x) be sum of digits in base 10 representation of xx , for example, S(123)=1+2+3=6

動態規劃——Maximum Sum of 3 Non-Overlapping Subarrays

使用 length 第一個 subarray n-2 [] 範圍 通過 兩個 這個題對我來說真的是相當難的題目了,嚴格來講可能不算是個動態規劃的題目,但這個題目對類似的劃分多個非重疊連續子區間的問題提供了一個很好解決方案 這個題目需要找三個非重疊的連續子區間,通過維護兩個

POJ:Maximum sum

總時間限制:  1000ms   記憶體限制:  65536kB 描述 Given a set of n integers: A={a1, a2,..., an}, we define a function

Codeforces Round #513 B. Maximum Sum of Digits(思維)

       題意是輸入一個n,從1-n中找兩個數,使得a+b=n,而且S(a)+S(b)的值是所有兩個數中最大的。S函式求的是一個數每一位上的數字之和,比如S(123) = 1 + 2 + 3

Maximum Sum of Digits(CodeForces 1060B)

In the first example, you can choose, for example, a=17 and b=18, so that S(17)+S(18)=1+7+1+8=17. It can be shown that it is impossible to get a larger a

918. Maximum Sum Circular Subarray

Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty s