1. 程式人生 > >hdu 1081(最大子矩陣和)

hdu 1081(最大子矩陣和)

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1081

先求每列第一個元素到每個元素的和      s[i][j] = s[i-1][j] + num[i][j];

在求第i行到 j 行的每列的和(1<= j < i <=  n)t[k] = s[i][k] - s[j][k] (k表示這行第幾列元素)

每求出一組t[n],求一次最大欄位和

#include <stdio.h>
#include <string.h>

int s[110][110];
int num[110][110];
int t[110];
int dp[110];

int max(int a,int b)
{
    return a>b?a:b;
}

int main()
{
    int n,tmp;
    int i,j,k;

    while(~scanf("%d",&n))
    {
        tmp = -0xffff;
        memset(s,0,sizeof(s));
        for(i = 1; i <= n; i++)
        {
            for(j = 1; j <= n; j++)
            {
                scanf("%d",&num[i][j]);
                s[i][j] = s[i-1][j] + num[i][j];
            }
        }

        for(i = 1; i <= n; i++)
        {
            for(j = 0; j < i; j++)
            {
                for(k = 1; k <= n; k++)
                {
                    t[k] = s[i][k]-s[j][k];
                    dp[k] = max(dp[k-1]+t[k],t[k]);
                    if(dp[k] > tmp)
                        tmp = dp[k];
                }
            }
        }
        printf("%d\n", tmp);
    }
    return 0;
}


相關推薦

HDU-1081-“大子矩陣”---- 暴力優化:從6次冪到3次冪

題目連結: 原題如下: Problem Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-a

hdu 1081(大子矩陣)

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1081 先求每列第一個元素到每個元素的和      s[i][j] = s[i-1][j] + num[

HDU 1081 大子

Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or

hdu 1081大子矩陣)dp To The Max

Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of

hdu 1081/poj 1050 大子矩陣(dp)

換成谷歌瀏覽器以後終於可以黏貼程式碼了,更新以後的markdown真心難用。。。 dp問題,先把給定的二維矩陣壓縮,變成一維矩陣,如此即可變成hdu1003,用動態規劃的思路求解即可 #include<iostream> #include<cm

POJ 1050 / HDU 1081 To the Max(大子矩陣

題目連結: 題意:給出一個n*n的矩陣,正負均有。求一個子矩陣使得該子矩陣的和儘可能的大。 思路:類似於最大子段和,即將前i行至前j行的矩陣壓縮成一行,利用一個數組c,c[k]表示第k列從第i行到第j行的和,接下來只需對陣列c求最大子段和,結果即為第i行到第j行中的最大

hdu 1081 To The Max(大子矩陣

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7533    Accepted Submission(s)

hihocoder 1580 dp大子矩陣

ima freopen tdi com hihocode images namespace ans open 題意: 給出n*m的矩陣求最大子矩陣和,要求必須把矩陣中的某一個元素替換成p 代碼: //求最大子矩陣和,容易想到壓縮之後dp但是這道題要求必須替換一

poj1050(大子矩陣

algorithm int image bsp color const turn amp div 設a[i][j]表示將矩陣壓縮成線性序列的前綴和 那麽我們在做dp時枚舉起點 i 與終點j 最內層枚舉行號,那麽可以一行一行的累加, 最後更新答案即可 #include&l

51Nod 1051 - 大子矩陣(DP)

題目連結 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1051 【題目描述】 一個M*N的矩陣,找到此矩陣的一個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。 例如:3×3的矩陣: -1 3

大子矩陣---(dp)

題目描述 一個M*N的矩陣,找到此矩陣的一個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。 例如:3*3的矩陣: -1 3 -1 2 -1 3 -3 1 2 和最大的子矩陣是: 3 -1 -1 3 1 2 Input 第1行:M和N,中間用

1634(小的大子矩陣

 寫到要瘋掉,這種需要細節的題目得在精神狀態比較好的時候寫。 #include<iostream> #include<cstdio> #include<algorithm

演算法優化:大子大子矩陣,一維,二維情況分析,動態規劃

最大子段和,前面b[j]理解的是:終點在j的最大連續子段和,及從k:j最大和 是對b[j]進行動態規劃,從k:j最大和:取決於k:j-1的最大和,他大於0的話,就為k:j-1的最大和+arr[j],他小於0的話,就只是arr[j] 終點在j一共有n種情況,原問題只是求b[

POJ 1050 To the Max 大子矩陣(二維的大欄位

傳送門: To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52306 Accepted: 27646 Description Given a two-dimensional array of positive

hdu1559 大子矩陣

最大子矩陣 Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4459    Accepted Submis

ZOJ 1074/POJ 1050 To the Max (大子矩陣)

首先要學會最大子段和的求法,如下 int DP(int a[],int n) { int i,f[101];//f[i]表示以i結尾子段最大和 int max = -200000000; for(i =

51Nod 1051 大子矩陣 (大子變形)

基準時間限制:2 秒 空間限制:131072 KB 分值: 40 難度:4級演算法題  收藏  關注 一個M*N的矩陣,找到此矩陣的一個子矩陣,並且這個子矩陣的元素的和是

[HDU1559][DP]大子矩陣

輸入資料的第一行為一個正整數T,表示有T組測試資料。每一組測試資料的第一行為四個正整數m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示給定的矩形有m行n列。接下來這個矩陣,有m行,每行有n個不大於1000的正整數。

ACM-大子矩陣

最大子矩陣和問題是對最大子序列和問題的擴充套件,即從一維擴充套件到了二維。但是解決此問題的方法和原來的方法並沒有太大的差別,這裡就以同樣的動態規劃的實錄思路來求解此問題。原來subSum[i]代表包含ai並且以ai結束的子序列的最大和,狀態轉移方程為subSum[i+1]

poj1050(動態規劃+大子矩陣)

題目要求是輸入一個N*N的矩陣,然後求出這個矩陣的最大子矩陣和,在一維空間中是求最大連續字串和,這題也算是它在二維空間裡的一個擴充套件吧…… 這個動歸先求第i行第j列在這一行從1到j的最大字串和,然後