題目描述
思路:
這道題最基本和原始的方法是窮舉,但是窮舉是乙個o(n^4)的演算法,題目中明確說明測試資料最大可能是100×100,窮舉會超出題目時間限制1000ms。而動態規劃是這道題解決的方法。
首先子矩陣的和可以轉化為子矩陣中每一列先求和再將他們加起來,即
9 2-4 1
-1 8
的和可以表示為每列之和得到的陣列再求和,即
(9-4-1) (2+1+8)
4 11
所以最大和為4+11=15.
這樣,就可以將矩陣壓縮為乙個一維陣列,而最大子矩陣的和即是這個一維陣列的最大子段和,而最大子段和就可以用動態規劃來求解。
最大子段和即是求乙個整數序列如中和最大的子段,他的最大和子段即是,和為11-4+13=20
最大子段和的dp遞推方程為:
b[i]=max
其中b[i]代表最大子段和中前i個數字之和。
這道題中,宣告乙個二維陣列columnarray[i][j]用來儲存原始矩陣前i行第j列的和,要求從第i行到第k行第j列的和即是columnarray[k][j]-columnarray[i-1][j]
可將遍歷子矩陣轉化為遍歷壓縮之後的和序列,用上述遞推方程就可求解。
**:
#include using namespace std;
int main()
} int sum=0,max=-9999,x;
for (i=1;i0) sum+=x;
else sum=x;
if(max
wa:
第一次用窮舉超時了。
POJ 1008 結題報告
模擬題,難度不大,主要是吃透題目意思 主要做好表示月份的單詞與相應序號的轉換,我用的是陣列 索引函式 haab日曆,一年365天,19個月,每個月20天,通過輸入可求得總天數sum t日曆,一年260 20 13天,對sum 260的結果分別對20,13取模定位到哪月哪天 廢話不多說,上 inclu...
poj3278 結題報告
這個題是乙個容易理解題意的簡單bfs題目.作為菜鳥的我竟然能自己想到解決方案.不容易.個人思路如下,農夫在每個點都有三種走法,我們先把初始位置標記為走過,三種方法位置沒走過就入隊,開始三個點都能入隊,再對三個點每次出隊乙個,分析這個點的三個位置能否走,能走得入隊,依此類推.這裡我用的訪問陣列是乘以個...
Hdu 2844 Poj 1742 結題報告
首先上面的兩道題都是同一道題,之所以同時拿出來是因為 hdu 的資料比 poj 的水,所以想區分一下。hdu 的資料對時間要求不高 但是 poj 如果你想用簡單的 多重揹包解決的話,就會tle 別問我怎麼知道。首先大家肯定會想到用多重揹包來做 畢竟題意可以巢狀模板如下 include include...