蓝桥杯 算法训练 最大的算式
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯 算法训练 最大的算式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
算法訓練 最大的算式 ? 時間限制:1.0s ? 內存限制:256.0MB 問題描述 題目很簡單,給出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 題意: 給出N個數字,不改變它們的相對位置,在中間加入K個乘號和N-K-1個加號,(括號隨便加)使最終結果盡量大。
| 852929 | 陳志陽 | 最大的算式 | 03-08 16:36 | 1.089KB | C++ | 正確 | 100 | 15ms | 11.36MB | 評測詳情 |
| 852881 | 陳志陽 | 最大的算式 | 03-08 16:32 | 1.090KB | C++ | 錯誤 | 55 | 15ms | 11.36MB | 評測詳情 |
| 852878 | 陳志陽 | 最大的算式 | 03-08 16:31 | 1.090KB | C++ | 錯誤 | 55 | 15ms | 11.36MB | 評測詳情 |
| 852838 | 陳志陽 | 最大的算式 | 03-08 16:27 | 1.044KB | C++ | 錯誤 | 88 | 15ms | 11.36MB | 評測詳情 |
| 846242 | 陳志陽 | Torry的困惑(基本型) | 03-07 17:34 | 810B | C++ | 正確 | 100 | 31ms | 12.82MB | 評測詳情 |
| 846229 | 陳志陽 | Torry的困惑(基本型) | 03-07 17:32 | 788B | C++ | 運行超時 | 0 | 運行超時 | 84.28MB | 評測詳情 |
| 844016 | 陳志陽 | 最大的算式 | 03-07 11:30 | 981B | C++ | 錯誤 | 33 | 0ms | 2.589MB | 評測詳情 |
?
代碼:
?
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <cstring> 5 6 using namespace std; 7 8 #define N 105 9 #define ll long long 10 11 ll dp[N][N][N]; 12 ll n,k; 13 ll a[N]; 14 ll sum[N]; 15 ll ans; 16 17 ll dfs(ll l,ll r,ll kk) 18 { 19 if(dp[l][r][kk] != -1) return dp[l][r][kk]; 20 if(kk == 0){ 21 dp[l][r][kk] = sum[r] - sum[l - 1]; 22 return dp[l][r][kk]; 23 } 24 ll i,cou; 25 ll ma = 0; 26 for(i = l;i <= r -1;i++){ 27 for(cou = 0;cou <= kk - 1;cou++){ 28 ma = max(ma,dfs(l,i,cou) * dfs(i + 1,r,kk - cou - 1) ); 29 } 30 } 31 if(l - r != kk){ 32 for(i = l;i <= r -1;i++){ 33 for(cou = 0;cou <= kk;cou++){ 34 ma = max(ma,dfs(l,i,cou) + dfs(i + 1,r,kk - cou) ); 35 } 36 } 37 } 38 dp[l][r][kk] = ma; 39 return dp[l][r][kk]; 40 } 41 42 int main() 43 { 44 //freopen("in.txt","r",stdin); 45 while(scanf("%I64d%I64d",&n,&k)!=EOF){ 46 47 memset(dp,-1,sizeof(dp)); 48 memset(sum,0,sizeof(sum)); 49 ll i; 50 for(i = 1;i <= n;i++){ 51 scanf("%I64d",&a[i]); 52 sum[i] = sum[i-1] + a[i]; 53 } 54 ans = dfs(1,n,k); 55 printf("%I64d\n",ans); 56 } 57 return 0; 58 }?
轉載于:https://www.cnblogs.com/njczy2010/p/5254632.html
總結
以上是生活随笔為你收集整理的蓝桥杯 算法训练 最大的算式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spark生态顶级项目汇总
- 下一篇: 推断股票强弱最有效的一个方法