首页 > 学院 > 开发设计 > 正文

qduoj 30 帅气的HYC求乘积(dfs)

2019-11-06 06:07:04
字体:
来源:转载
供稿:网友

题目地址:点击打开链接

思路:因为数据量比较小,直接搜索枚举放乘号的位置就行。

注意枚举到最后一位数字后别忘了记录下来。

代码:

#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 1231
62
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表