藍橋杯VIP試題 演算法訓練 乘積最大

2021-10-03 12:08:18 字數 1176 閱讀 5479

資源限制

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

問題描述

今年是國際數學聯盟確定的「2000——世界數學年」,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目:

設有乙個長度為n的數字串,要求選手使用k個乘號將它分成k+1個部分,找出一種分法,使得這k+1個部分的乘積能夠為最大。

同時,為了幫助選手能夠正確理解題意,主持人還舉了如下的乙個例子:

有乙個數字串:312, 當n=3,k=1時會有以下兩種分法:

312=36

312=62

這時,符合題目要求的結果是:31*2=62

現在,請你幫助你的好朋友xz設計乙個程式,求得正確的答案。

輸入格式

程式的輸入共有兩行:

第一行共有2個自然數n,k(6≤n≤40,1≤k≤6)

第二行是乙個長度為n的數字串。

輸出格式

輸出所求得的最大乘積(乙個自然數)。

樣例輸入

4 21231

樣例輸出

62思路:本題與我寫過的那篇最大算式差不多一樣,都是用動態規劃的思想來解決這個題目,只不過這道題是乘法,而那道題是加法,而最重要的式子則改為:a[i][j]=max(a[i][j],a[k-1][j-1]*(a[i][0]%t1)),在乙個數當中插入乘號使之成為乙個最大的數,即每個位置都要試一遍來尋找最佳的方案,而動態規劃很好的是他可以保留每次計算最大的數值,而如果要使乙個數達到最大,必須使每次計算的值達到最大,從而挑選出最大的值,避免了過多不必要的計算。

**如下:

#include

#include

#include

#include

using

namespace std;

intmain()

t1=1;

for(i=

1;i<=n;i++

) a[i]

[j]=

max(a[i]

[j],a[k-1]

[j-1]*

(a[i][0

]%t1));

t1=1;

}}} cout<[m];

}

藍橋杯VIP試題 演算法訓練 最大獲利

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 chakra是一位年輕有為的企業家,最近他在進軍餐飲行業。他在各地開拓市場,共買下了n個飯店。在初期的市場調研中,他將一天劃分為m個時間段,並且知道第i個飯店在第j個時間段內,會有aij位服務員當值和bij位客戶光臨。他還分析了不同...

藍橋杯VIP試題 演算法訓練 比賽安排

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值。輸出格式 ...

藍橋杯VIP試題 演算法訓練 排列問題

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 求乙個0 n 1的排列 即每個數只能出現一次 給出限制條件 一張n n的表,第i行第j列的1或0,表示為j 1這個數不能出現在i 1這個數後面,並保證第i行第i列為0 將這個排列看成乙個自然數,求從小到大排序第k個排列。資料規模和約...