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

####思路:直接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 人评分