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