日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯 算法训练 最大的算式

發布時間:2025/6/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯 算法训练 最大的算式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

傳送門

算法訓練 最大的算式 ? 時間限制: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:361.089KBC++正確10015ms11.36MB評測詳情
852881陳志陽最大的算式03-08 16:321.090KBC++錯誤5515ms11.36MB評測詳情
852878陳志陽最大的算式03-08 16:311.090KBC++錯誤5515ms11.36MB評測詳情
852838陳志陽最大的算式03-08 16:271.044KBC++錯誤8815ms11.36MB評測詳情
846242陳志陽Torry的困惑(基本型)03-07 17:34810BC++正確10031ms12.82MB評測詳情
846229陳志陽Torry的困惑(基本型)03-07 17:32788BC++運行超時0運行超時84.28MB評測詳情
844016陳志陽最大的算式03-07 11:30981BC++錯誤330ms2.589MB評測詳情
題解: 也是心塞啊,非要去想有沒有什么貪心的結論,導致一直wa 正解就是 記憶化區間dp 轉移方程: 1 for(i = l;i <= r -1;i++){ 2 for(cou = 0;cou <= kk - 1;cou++){ 3 ma = max(ma,dfs(l,i,cou) * dfs(i + 1,r,kk - cou - 1) ); 4 } 5 } 6 if(l - r != kk){ 7 for(i = l;i <= r -1;i++){ 8 for(cou = 0;cou <= kk;cou++){ 9 ma = max(ma,dfs(l,i,cou) + dfs(i + 1,r,kk - cou) ); 10 } 11 } 12 }

?

代碼:

?

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

總結

以上是生活随笔為你收集整理的蓝桥杯 算法训练 最大的算式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。