考慮從後往前去決定每個數前加不加括號,a[
i]>0a
[i]>
0, 括號對其無影響, f[i
]=a[
i]+f
[i+1
]f[i
]=a[
i]+f
[i+1
]a[i
]<0a
[i]<0,
a[i+
1]<0a
[i+1
]<
0, 根據性質2
2, f[i
]=a[
i]+s
uf_s
um[i
+1]f
[i]=
a[i]
+suf
_sum
[i+1
] .a[
i+1]
>0a
[i+1
]>
0, 根據性質1
1, 有兩個決策, 分別是
不加括號得到a[i
+1]a
[i+1
],加括號失去a[i
+1]a
[i+1
]但得到i+2
i+2後所有數字的和;
得到 f[i
]=max(a
[i]+
f[i+
1],a
[i]−
a[i+
1]+s
uf_s
um[i
+2])
f[i]
=max(a
[i]+
f[i+
1],a
[i]−
a[i+
1]+s
uf_s
um[i
+2])
#include
#define reg register
typedef
long
long ll;
intread()
while
(isdigit
(c)) s = s*
10+ c-
'0', c =
getchar()
;return s * flag;
}const
int maxn =
2e5+10;
int n;
int cnt;
int a[maxn]
;ll b[maxn]
;ll f[maxn]
;ll suf_sum[maxn]
;char opt[3]
;ll abd
(ll x)
void
work()
cnt =0;
for(reg int i =
1; i <= n; i ++
) suf_sum[cnt+1]
=0;for
(reg int i = cnt; i >=
1; i --
) suf_sum[i]
= suf_sum[i+1]
+abd
(b[i]);
f[cnt]
= b[cnt]
;for
(reg int i = cnt-
1; i >=
1; i --
)printf
("%lld\n"
, f[1]
);}int
main()
動態規劃 什麼是動態規劃?
先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...
mysql動態規劃 動態規劃
動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...
《動態規劃》 ACM 動態規劃例題詳解
描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 圖1 圖1給出了乙個數字三角形。從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到乙個和,你的任務就是找到最大的和。注意 路徑上的每一步只能從乙個數走到下一層上和它最近的左邊的那個數或者右邊的那個數。輸...