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