java枚举蓝桥杯,[蓝桥杯][算法训练VIP]乘积最大-题解(Java代码)

该博客讨论了一种利用深度优先搜索(DFS)策略来解决字符串中指定数量的乘号放置问题,以最大化结果数值。作者给出了详细的Java代码实现,通过递归地尝试每个乘号的所有可能位置,并计算每种情况下的乘积,从而找到最优解。博客内容涉及字符串操作、递归算法和动态规划思想。
摘要由CSDN通过智能技术生成

####思路:直接dfs,枚举每个*可能存在的位置。

例如:N=4 K=2 str=1231

4 2 1231

1 ① 2 ② 3 ③ 1

①②③就是*可能存在的位置

第一个*号的位置p1: 1-(N-1)-(K-1)

第二个*号的位置p2: p1-(N-1)-(K-2)

第m个*号的位置pm: p(m-1)-(N-1)-(K-m)

得到每个*的位置后就计算结果并更新最大值

```java

import java.util.Scanner;

public class Main

{

private static int N,K;

private static String str;

private static int ans=0;

private static int[] path;//记录每个乘号的位置

public static void main(String[] args)

{

Scanner scan=new Scanner(System.in);

N=scan.nextInt();

K=scan.nextInt();

scan.nextLine();

str=scan.nextLine();

path=new int[K+1];

dfs(1);//放第一个乘号

System.out.println(ans);

scan.close();

}

private static void dfs(int cnt)

{

if(cnt>K)

{

// for(int i=1;i<=K;i++)

// System.out.print(path[i]+" ");

// System.out.println();

int max=1;

for(int i=1;i<=K;i++)

{

max*=Integer.valueOf(str.substring(path[i-1],path[i]));

}

max*=Integer.valueOf(str.substring(path[K],N));

ans=Math.max(ans, max);

return;

}

//每个乘号可以放的位置

for(int i=path[cnt-1]+1;i<=(N-1)-(K-cnt);i++)

{

path[cnt]=i;

dfs(cnt+1);

path[cnt]=0;

}

}

}

```

0.0分

1 人评分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值