動態規劃 最大的算式

2021-08-20 00:05:56 字數 895 閱讀 8138

問題描述

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

題目分析:基礎動態規劃

dp[i][j]表示前i個數的j個乘號的最大值

sum[i]表示前i個數的和

dp[i][j]=max(dp[i][j],dp[p-1][j-1]*(dp[i][0]-dp[p-1][0]))

p是前i個數的插入的位置

比如說 1 2 3 4 5

當i=4時 j=2 當p=4時 dp[3][1]*(dp[4][0]-dp[3][0]) 和dp[4][2]比較

注意資料可能很大,所以要注意用long long 

翠花,上**~

#includeusing namespace std;

int sum[20]=;

int dp[20][20]=;

void init(int n)

}int main()}}

cout<

動態規劃 最大的算式

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

九 動態規劃 最大的算式

問題 最大的算式 問題描述 題目很簡單,給出n個數字,不改變它們的相對位置,在中間加入k個乘號和n k 1個加號,括號隨便加 使最終結果盡量大。因為乘號和加號一共就是n 1個了,所以恰好每兩個相鄰數字之間都有乙個符號。例如 n 5,k 2,5個數字分別為1 2 3 4 5,可以加成 1 2 3 4 ...

藍橋杯 最大的算式 動態規劃

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