題目地址:點擊打開鏈接
思路:因為數據量比較小,直接搜索枚舉放乘號的位置就行。
注意枚舉到最后一位數字后別忘了記錄下來。
代碼:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;typedef long long ll;ll rec[10], ans;int num[25], n, k;bool book[25];void dfs(int cur, ll PRe, int cnt){ if(cnt == k+1 && cur == n+1) { ll tmp = 1; for(int i = 1; i <= k+1; i++) tmp *= rec[i]; ans = max(ans, tmp); return ; } if(cur > n) return ; //最后一位不能放 if(cur < n) { rec[cnt] = pre*10+num[cur]; dfs(cur+1, 0, cnt+1); } //到最后了別忘了要記錄最后個數 if(cur == n) rec[cnt] = pre*10+num[cur]; dfs(cur+1, pre*10+num[cur], cnt);}int main(void){ while(cin >> n >> k) { for(int i = 1; i <= n; i++) { char ch; scanf(" %c", &ch); num[i] = ch-'0'; } ans = 0; dfs(1, 0, 1); printf("%lld/n", ans); } return 0;}帥氣的HYC求乘積
發布時間: 2015年11月1日 17:02 最后更新: 2015年11月1日 18:38 時間限制: 1000ms 內存限制: 128M
帥氣的HYC餓了,于是他定了外賣,但是去拿外賣時卻忘了帶錢,這可怎么辦?于是外賣小哥對他說,我也不為難你,我給你出個題,你要做出來就送你一份免費午餐。題目是這樣的:
設有一個長度N的數字串,要求你使用K個乘號將它分成K+1個部分,找出一種分法,使得這K+1個部分的乘積能夠為最大例如:有一個數字串: 312,當N=3,K=1時會有以下兩種分法:1)3*12=362)31*2=62這時,符合題目要求的結果是: 31*2=62
多組測試數據,EOF結束第一行共有2個自然數N,K (1<=N<=19,0<=K<=5)第二行是一個長度為N的數字串。
結果輸出到文件,相對于輸入,應輸出所求得的最大乘積(一個自然數)
4 2 123162
新聞熱點
疑難解答