演算法-藍橋杯-演算法訓練 最大的算式 (JAVA)
1 引言
今天的第一篇文章,競賽開始進入倒計時了!
2 題目
問題描述
題目很簡單,給出N個數字,不改變它們的相對位置,在中間加入K個乘號和N-K-1個加號,(括號隨便加)使最終結果儘量大。因為乘號和加號一共就是N-1個了,所以恰好每兩個相鄰數字之間都有一個符號。例如:N=5,K=2,5個數字分別為1、2、3、4、5,可以加成:
1*2*(3+4+5)=24
1*(2+3)*(4+5)=45
(1*2+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)*4*5=120
3 原始碼
import java.util.Scanner; public class Main { static int N; static int Mul; static long[] num = new long[20]; static long[] sum = new long[20]; static long[][] dp = new long[20][20]; /* * dp[i][j]代表前i個數中有j個乘號的最大值 * sum[i]是前i個數的和 * 狀態轉移方程:dp[i][0] = sum[i] * dp[i][j] = max(dp[i][j],dp[k-1][j-1]*(sum[i]-sum[j-1])) * k為乘號的位置; */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); N= in.nextInt(); Mul = in.nextInt(); for ( int i = 0 ; i < 20 ; i++){ for ( int j = 0 ; j < 20 ; j++){ dp[i][j] = 0; } } sum[0] = 0; num[0] = 0; for ( int i = 1 ; i <= N ; i++){ num[i] = in.nextLong(); sum[i] = sum[i-1] + num[i]; dp[i][0] = sum[i]; } for ( int i = 2 ; i <= N ; i++){ int t = Math.min(i, Mul); for ( int j = 1 ; j <= t ; j++){//j為乘號的個數 for ( int k = 2 ; k <= i ; k++){//k為乘號的位置 long tmp = sum[i]-sum[k-1]; dp[i][j] = Math.max(dp[i][j], dp[k-1][j-1]*tmp); } } } System.out.print(dp[N][Mul]); in.close(); } }
4 思路講解
參考別人的。。。。
5 結束語
分享和幫助是人生一大樂事,希望可以幫助您。本人才疏學淺,如果有不當之處,還請批評指正。同時歡迎大家評論、點贊及轉發!
相關推薦
演算法——藍橋杯篇——乘積最大
問題描述 今年是國際數學聯盟確定的“2000——世界數學年”,又恰逢我國著名數學家華羅庚先生誕辰90週年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的一個好朋友XZ也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目:
演算法 - 求子陣列的最大和(C++)
//**************************************************************************************************** // // 求子陣列的最大和 - C++ - by Chimomo // //
筆試面試演算法經典--連續子陣列的最大乘積及連續子陣列的最大和(Java)
1. 子陣列的最大和 輸入一個整形陣列,數組裡有正數也有負數。陣列中連續的一個或多個整陣列成一個子陣列,每個子陣列都有一個和。求所有子陣列的和的最大值。例如陣列:arr[]={1, 2, 3, -2, 4, -3 } 最大子陣列為 {1, 2, 3, -2,
藍橋杯 基礎訓練 完美的代價(轉)
基礎練習 完美的代價 時間限制:1.0s 記憶體限制:512.0MB 問題描述 迴文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為迴文串才是完美的。現在給你一個串,它不一定是迴文的,請你計算最少的交換次數使得該串變成
《劍指offer》系列 連續子陣列的最大和(Java)
連結 牛客:連續子陣列的最大和 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊
藍橋杯:蒜頭君的隨機數(java)
package lanqiaobei; import java.util.*; /* 練習題:蒜頭君的隨機數 蒜頭君想在學校中請一些同學一起做一項問卷調查,為了確保實驗的客觀性,他先用計算機生成了 n(1≤n≤100)個 1 到 1000 之間的隨機整數,對於其中重複的數字,只保留一個,把其餘相
藍橋杯:進位制轉換(java)
package lanqiaobei; import java.util.HashMap; import java.util.Scanner; import java.util.Stack; /* 練習題:進位制轉換 輸入一個十進位制數 N,將它轉換成 R 進位制數輸出。在 10≤R≤16的情況
《劍指offer》系列 連續子陣列的最大和(Java)
連結 題目描述 HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如
LeetCode: 104. 二叉樹的最大深度(Java)
題目 給定一個二叉樹,找出其最大深度。 二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 解答:感覺現在會做了。遞迴
藍橋杯真題 ——地宮取寶(java)
標題:地宮取寶 X 國王有一個地宮寶庫。是 n x m 個格子的矩陣。每個格子放一件寶貝。每個寶貝貼著價值標籤。 地宮的入口在左上角,出口在右下角。  
劍指offer第二版面試題42:連續子陣列的最大和(java)
題目描述: 輸入一個整型陣列,數組裡有正數也有負數。陣列中一個或連續的多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為O(n)。例如輸入的陣列為{1,-2,3,10,-4,7,2,-5},和最大的子陣列為{3,10,-4,7,2},因此輸出為
二叉樹中節點的最大距離(java)
定義二叉樹中節點的距離為節點之間邊的個數。<p> <wbr> <wbr> 一個二叉樹中節點的最大距離由三部分綜合求得:一部分是左子樹中節點的最大距離,另一部分是右子樹中節點的最大距離,最後一部分是左邊的最大深度加上右邊的最大深度。<
二叉樹最大深度(Java)
題目:輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉子結點一次經過的結點形成樹的一條路徑,最長路徑的長度為樹的深度。根節點的深度為1。 解體思路: 如果根節點為空,則深度為0,返回0,遞迴的出口 如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度, 比較左
演算法-藍橋杯-演算法訓練 最大的算式 (JAVA)
1 引言 今天的第一篇文章,競賽開始進入倒計時了!2 題目問題描述 題目很簡單,給出N個數字,不改變它們的相對位置,在中間加入K個乘號和N-K-1個加號,(括號隨便加)使最終結果儘量大。因為乘號和加號一共就是N-1個了,所以恰好每兩個相鄰數字之間都有一個符號。例如:
演算法-藍橋杯-演算法訓練 Torry的困惑(基本型) (JAVA)
1 引言 Torry的困惑,我們程式設計來解決,我們的困惑,還是要我們自己來解決。。。2 題目問題描述 Torry從小喜愛數學。一天,老師告訴他,像2、3、5、7……這樣的數叫做質數。Torry突然想到一個問題,前10、100、1000、10000……個質數的乘積是多
演算法-藍橋杯-演算法訓練 Lift and Throw (C++)
1 引言 吃完飯,繼續,今天的目標是10篇,然後去看《演算法》和課外書。2 題目問題描述 給定一條標有整點(1, 2, 3, ...)的射線. 定義兩個點之間的距離為其下標之差的絕對值. Laharl, Etna, Flonne一開始在這條射線上不同的三個點, 他們
演算法-藍橋杯-演算法訓練 表示式計算 (JAVA)
1 引言什麼題。。。2 題目問題描述 輸入一個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含一個表示式。輸出格式 輸出這個表示式的值。樣例輸入1-2+3*(4-5)樣例輸出-4資料規模和約定 表示式長度不超過100,表示式運算
演算法-藍橋杯-入門訓練 Fibonacci數列 (JAVA)
1 引言 斐波那契數列一直以來都是一個經典的問題,可惜的是以前“只聞其聲不見其人”,沒有好好地研究這個問題,這次恰好在藍橋杯的入門訓練中遇到,實乃萬幸。2 題目問題描述Fibonacci數列的遞推
2018.11.14——最大期望(EM)演算法
最大期望演算法(expectation-maximization ),依賴於不可觀察的隱形變數(例如神經網路中的權值)的概率模型中——引數的最大似然估計。 似然:來源於古漢語,“然” 稱之為xxxxx的樣子,似然 = 像應該有的樣子。引數該有的樣子,怎麼得到?答:一系列引數,使得期望最大,例如對
ALGO-70演算法訓練 最長字串 (c++)
演算法訓練 最長字串 時間限制:1.0s 記憶體限制:512.0MB 求出5個字串中最長的字串。每個字串長度在100以內,且全為小寫字母。 樣例輸入 one two three four fiv