【輸入樣例】110
1 -1 2 2 3 -3 4 -4 5 -5
【輸出樣例】
13【提示】
就是求最大子段和問題,樣列取2,2,3,−3,4和5,baidu搜poj 2479 maximum sum,可獲得大量經典最大子段和問題的題目解析,本題o(n2)演算法超時,必須用o(n)演算法。
思路:從左到右分別求出它們所在位置的最大連續和,然後從右到左求出它們所在的最大連續和,接著就是a[i]+b[i+1],a陣列代表著從左到右,b代表著從右到左所以不斷的比較a[0]+b[1],a[1]+b[2]求最大值即可,怎樣求解最大值(如果當前的資料和小於零,很明顯,將它加入到後面的計算中,肯定會減少最大值很簡單的道理,-1+4<0+4,如果之前的取值小於零,拋棄它,重新賦值為零,然後通過maxs不斷更新當前的最大值。
#include
#include
#include
using
namespace std;
const
int maxn=
50000+5
;int t,m;
int a[maxn]
;int dp[maxn]
;int
main()
dp[0]
= a[0]
;int sum = a[0]
;int ans = a[0]
;for
(int i =
1; i < m; i++
) sum +
= a[i];if
(sum > ans)
dp[i]
= ans;
} sum = a[m-1]
;int max = dp[m-2]
+ sum;
ans = a[m-1]
;for
(int j = m-
2; j >=
1; j--
) sum +
= a[j];if
(sum > ans)
max =
max(max,dp[j-1]
+ans)
;//通過max不斷更新當前的最大值
}printf
("%d\n"
,max);}
return0;
}
第九章 動態規劃 1300 雞蛋的硬度
1300 雞蛋的硬度 時間限制 1000 ms 記憶體限制 65536 kb 題目描述 最近xx公司舉辦了乙個奇怪的比賽 雞蛋硬度之王爭霸賽。參賽者是來自世界各地的母雞,比賽的內容是看誰下的蛋最硬,更奇怪的是xx公司並不使用什麼精密儀器來測量蛋的硬度,他們採用了一種最老土的辦法 從高度扔雞蛋 來測試...
第九章 動態規劃 1301 大盜阿福
1301 大盜阿福 時間限制 1000 ms 記憶體限制 65536 kb 提交數 3388 通過數 1400 題目描述 阿福是一名經驗豐富的大盜。趁著月黑風高,阿福打算今晚洗劫一條街上的店鋪。這條街上一共有 n 家店鋪,每家店中都有一些現金。阿福事先調查得知,只有當他同時洗劫了兩家相鄰的店鋪時,街...
C語言 第九章動態記憶體
手動申請 手動釋放 什麼時候使用動態記憶體 1.儲存比較大的資料量時 2.記憶體大小可以變化時 include void malloc size t size 申請size個位元組的動態記憶體 返回申請到的動態記憶體的起始位址 如果申請失敗返回 nullvoid calloc size t nmem...