算法训练 最大的算式(动态规划)
問題描述
題目很簡(jiǎn)單,給出N個(gè)數(shù)字,不改變它們的相對(duì)位置,在中間加入K個(gè)乘號(hào)和N-K-1個(gè)加號(hào),(括號(hào)隨便加)使最終結(jié)果盡量大。因?yàn)槌颂?hào)和加號(hào)一共就是N-1個(gè)了,所以恰好每?jī)蓚€(gè)相鄰數(shù)字之間都有一個(gè)符號(hào)。例如:
N=5,K=2,5個(gè)數(shù)字分別為1、2、3、4、5,可以加成:
12(3+4+5)=24
1*(2+3)(4+5)=45
(12+3)(4+5)=45
……
輸入格式
輸入文件共有二行,第一行為兩個(gè)有空格隔開的整數(shù),表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行為 N個(gè)用空格隔開的數(shù)字(每個(gè)數(shù)字在0到9之間)。
輸出格式
輸出文件僅一行包含一個(gè)整數(shù),表示要求的最大的結(jié)果
樣例輸入
5 2
1 2 3 4 5
樣例輸出
120
樣例說明
(1+2+3)45=120
本來還是昨天晚上看到的這個(gè)題目,沒怎么想就去睡覺了。今天來補(bǔ)上。
動(dòng)態(tài)規(guī)劃真的很吸引人,但是又真的很難。主要是狀態(tài)轉(zhuǎn)移方程,只要想出來就不難了。
這個(gè)題目的狀態(tài)轉(zhuǎn)移方程是dp[i][j]=max(dp[i][j],dp[l-1][j-1](sum[i]-sum[l-1]));其中2<=l<=i。
代碼如下:
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的算法训练 最大的算式(动态规划)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树的操作4
- 下一篇: 算法训练 未名湖边的烦恼(递推)