問題描述
題目很簡單,給出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 21 2 3 4 5
樣例輸出
120樣例說明
(1+2+3) * 4 * 5=120
#includeusing namespace std;
typedef long long ll;
ll dp[20][20];//dp[i][j]中i,j分別表示前i個數(包括i)和劃分的次數
ll a[20];
int main()
for(int i = 1; i <= n; i++)
for(int j = 1; j <= k; j++)//劃分的次數
for(int k = j; k < i; k++)//這裡應該從j開始,j個數才可以劃分為j-1次
dp[i][j] = max(dp[i][j],dp[k][j - 1] * (dp[i][0] - dp[k][0]));
cout << dp[n][k] << endl;
return 0;
}
藍橋杯 最大的算式 動態規劃
問題描述 題目很簡單,給出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 ...
藍橋杯試題 演算法訓練 最大的算式
資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 題目很簡單,給出n個數字,不改變它們的相對位置,在中間加入k個乘號和n k 1個加號,括號隨便加 使最終結果盡量大。因為乘號和加號一共就是n 1個了,所以恰好每兩個相鄰數字之間都有乙個符號。例如 n 5,k 2,5個數字分別為1 2...
藍橋杯 神奇算式
由4個不同的數字,組成的乙個乘法算式,它們的乘積仍然由這4個數字組成。比如 6 x 210 1260 8 x 473 3784 27 x 81 2187 都符合要求。如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,請輸出剩餘的滿足要求的算式且按照第乙個因數從小到大排列,第乙個...