poj1050(動態規劃+最大子矩陣和)
題目要求是輸入一個N*N的矩陣,然後求出這個矩陣的最大子矩陣和,在一維空間中是求最大連續字串和,這題也算是它在二維空間裡的一個擴充套件吧……
這個動歸先求第i行第j列在這一行從1到j的最大字串和,然後,計算這個代表每行最大子串和的矩陣上的每列的最大子串和……
我就在第二個步驟出過問題,好在換了種方法過了……
還是看程式碼吧:
#include <iostream> #include <cstdio> using namespace std; const int maxn=110; int s[maxn][maxn]={0}; int p[maxn][maxn]={0}; int i,j,k; int flag; int n,MAX,sum; int max(int a,int b) {return a>b?a:b;} void dp() { p[1][1]=s[1][1]; for(i=1;i<=n;++i) { for(j=1;j<=n;++j) p[i][j]=p[i][j-1]+s[i][j]; } for(i=1;i<=n;++i) { for(j=i;j<=n;++j) { sum=0; for(k=1;k<=n;++k) { sum+=p[k][j]-p[k][i-1]; if(sum<0) sum=0; MAX=max(MAX,sum); } } } } int main() { scanf("%d",&n); for(i=1;i<=n;++i) for(j=1;j<=n;++j) { scanf("%d",&s[i][j]); } dp(); printf("%d\n",MAX); return 0; }
相關推薦
poj1050(動態規劃+最大子矩陣和)
題目要求是輸入一個N*N的矩陣,然後求出這個矩陣的最大子矩陣和,在一維空間中是求最大連續字串和,這題也算是它在二維空間裡的一個擴充套件吧…… 這個動歸先求第i行第j列在這一行從1到j的最大字串和,然後
動態規劃 ------最大子段和
動態規劃 函數 cnblogs png 規劃 font 3-9 .cn -- 1.最大子段和的問題描述 2.動態規劃的求解: 3.優化函數的遞推方程 4.動態規劃求解偽碼 5.動態規劃求解的小結: 動態規劃的
LeetCode-初級=動態規劃-最大子序和
給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 進階: 如果你已經實現
POJ-1050 動態規劃最大子段和最大子陣
1、最大子段 由於最大子段不可能以負數或負數段開頭,可以以此得到演算法 int max(int a[],int n) { int sum,maxsum; int i ; sum = maxsum = 0; for(i =
分治法/動態規劃-最大子序和
給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。 示例: 輸入: [-2,1,-3,4,-1,2,1,-5,4], 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。 分治
動態規劃 最大子段和
mes 最小 最大的 iostream ace 動態規劃 strong 最大值 ffffff 子段與子段和的概念: 給定一個由數字組成的序列,其中一段連續的序列稱為一個子段(假設非空),子段中所有的數字和就是為 子段和 例子: {1,2,3,4} ,
演算法優化:最大子段和,最大子矩陣和,一維,二維情況分析,動態規劃
最大子段和,前面b[j]理解的是:終點在j的最大連續子段和,及從k:j最大和 是對b[j]進行動態規劃,從k:j最大和:取決於k:j-1的最大和,他大於0的話,就為k:j-1的最大和+arr[j],他小於0的話,就只是arr[j] 終點在j一共有n種情況,原問題只是求b[
poj1050(最大子矩陣和)
algorithm int image bsp color const turn amp div 設a[i][j]表示將矩陣壓縮成線性序列的前綴和 那麽我們在做dp時枚舉起點 i 與終點j 最內層枚舉行號,那麽可以一行一行的累加, 最後更新答案即可 #include&l
最大子矩陣和(poj1050 動規)
題意:給出一個數字矩陣,找出一個子矩陣,使得其中的數字之和最大。 解題思路:這道題是對最大連續子串和的一種擴充套件。解決辦法就是在二維矩陣轉化為多個一維陣列來求最大值。具體來說就是先固定所求子矩陣的左右邊界i和j,然後求出每行從左邊界到右邊界的數之和,這樣每行的和就可以作為
hihocoder 1580 dp最大子矩陣和
ima freopen tdi com hihocode images namespace ans open 題意: 給出n*m的矩陣求最大子矩陣和,要求必須把矩陣中的某一個元素替換成p 代碼: //求最大子矩陣和,容易想到壓縮之後dp但是這道題要求必須替換一
51Nod 1051 - 最大子矩陣和(DP)
題目連結 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1051 【題目描述】 一個M*N的矩陣,找到此矩陣的一個子矩陣,並且這個子矩陣的元素的和是最大的,輸出這個最大的值。 例如:3×3的矩陣: -1 3
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
最大子矩陣和---(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
POJ 1050 / HDU 1081 To the Max(最大子矩陣和)
題目連結: 題意:給出一個n*n的矩陣,正負均有。求一個子矩陣使得該子矩陣的和儘可能的大。 思路:類似於最大子段和,即將前i行至前j行的矩陣壓縮成一行,利用一個數組c,c[k]表示第k列從第i行到第j行的和,接下來只需對陣列c求最大子段和,結果即為第i行到第j行中的最大
動態規劃-最小路徑和
給定一個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。 說明:每次只能向下或者向右移動一步。 示例: 輸入: [ [1,3,1], [1,5,1], [4,2,1] ] 輸出: 7 解釋:
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
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)