藍橋杯試題 演算法訓練 最大的算式

2021-10-03 11:34:58 字數 969 閱讀 3115

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

題目很簡單,給出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 21 2 3 4 5

樣例輸出

120樣例說明

(1+2+3)45=120

思路:利用動態規劃解決這個題目我覺得更多用了搜尋演算法,乙個乙個遍歷然後選擇最大的值作為最終結果,而其中最重要的算式要就是這個:a[i][j]=max(a[i][j],a[k-1][j-1]*(a[i][0]-a[k-1][0])),max函式中選取兩個數值較大進行賦值,再比較,而動態規劃可以使每次計算最大的值都儲存起來,要運算的時候直接用即可,需要多少乘以多少都會有儲存,而且每次經過刪選可以使其值更大,再呼叫進行計算即可。

**如下:

#include

#include

#include

using

namespace std;

intmain()

for(i=

1;i<=n;i++

)//陣列中儲存的值為行代表數的個數,列代表乘號的個數}}

cout<[m];

//輸出n個數m個乘號時最大的數

}

藍橋杯 演算法訓練 最大的算式 (動態規劃)

演算法訓練 最大的算式 時間限制 1.0s 記憶體限制 256.0mb 問題描述 題目很簡單,給出n個數字,不改變它們的相對位置,在中間加入k個乘號和n k 1個加號,括號隨便加 使最終結果盡量大。因為乘號和加號一共就是n 1個了,所以恰好每兩個相鄰數字之間都有乙個符號。例如 n 5,k 2,5個數...

藍橋杯 ALGO 116演算法訓練 最大的算式

問題描述 題目很簡單,給出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 ...

藍橋杯 ALGO 116 演算法訓練 最大的算式

演算法訓練 最大的算式 時間限制 1.0s 記憶體限制 256.0mb 問題描述 題目很簡單,給出n個數字,不改變它們的相對位置,在中間加入k個乘號和n k 1個加號,括號隨便加 使最終結果盡量大。因為乘號和加號一共就是n 1個了,所以恰好每兩個相鄰數字之間都有乙個符號。例如 n 5,k 2,5個數...