参考代码:

import java.util.*;

public class Main {//组合型

static int n;

static int r;

static int[]arr=new int[1000];

static int[]p=new int[1000];

static int count;

static int max=-(int)1e9;

public static void main(String[]args) {

Scanner input=new Scanner(System.in);

int k=input.nextInt();

while(k>0) {

n=input.nextInt();

r=input.nextInt();

for(int i=1;i<=n;i++)p[i]=input.nextInt();

dfs(1,1);

System.out.println(max);

max=-(int)1e9;

k--;

}

}

public static void dfs(int x,int start) {

if((x-1)+(n-start+1)<r)return;/*剪枝 x-1表示当前位置以及放置的个数

                                 n-start+1表示剩下要排的个数 组合的剪纸                        */

if(x>r) {

int sum=1;

for(int i=1;i<=r;i++) {

sum*=arr[i];

}

max=Math.max(sum, max);

}

for(int i=start;i<=n;i++) {//start表示有多个分支

arr[x]=p[i];

dfs(x+1,i+1);//这里i+1保证前一个数一定大于后一个数比如123.

arr[x]=0;

}

}


}



点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论