第一题:组队
题目描述
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量。
public class one{
static int a;//静态全局变量
int b;//实例全局变量
}
全局变量不能先声明再赋值,除非赋值语句用{}括起来。
静态全局变量可以在类里声明,方法内直接赋值。
dfs方法如下:
//第一题:组队 dfs
public class One {
int index=0,sum=0;
static int rsum=0;
static int v[]=new int[20];//记录20名选手是否被选过
static int a[][]= new int[][]{{97,90,0,0,0},{92,85,96,0,0},{0,0,0,80,86},{89,83,97,0,0},
{82,86,0,0,0},{0,0,0,87,90},{0,97,96,0,0},{0,0,89,0,0},{95,99,0,0,0},{0,0,96,97,0},
{0,0,0,93,98},{94,91,0,0,0},{0,83,87,0,0},{0,0,98,97,98},{0,0,0,93,86},{98,83,99,98,81},{93,87,92,96,98},{0,0,0,89,92},{0,99,96,95,81}};
public static void main(String []args) {
dfs(0,0);
System.out.println("最大评分之和为"+rsum);
}
public static void dfs(int sum,int index) {
int i;
if(index==5) {
rsum=max(sum,rsum);
return;
}
for(i=0;i<a.length;i++) {
if(v[i]!=1) {
v[i]=1;
dfs(sum+a[i][index],index+1);
v[i]=0;
}
} return;
}
public static int max(int x1,int x2) {
if(x1>x2)
return x1;
return x2;
}
}
暴力破解如下:
public class Onee {
public static void main(String []args) {
int maxsum=0;
int a[][]= new int[][]{{97,90,0,0,0},{92,85,96,0,0},{0,0,0,80,86},{89,83,97,0,0},
{82,86,0,0,0},{0,0,0,87,90},{0,97,96,0,0},{0,0,89,0,0},{95,99,0,0,0},{0,0,96,97,0},
{0,0,0,93,98},{94,91,0,0,0},{0,83,87,0,0},{0,0,98,97,98},{0,0,0,93,86},
{98,83,99,98,81},{93,87,92,96,98},{0,0,0,89,92},{0,99,96,95,81}};
for(int i=0;i<a.length;i++) {
for(int j=0;j<a.length;j++) {
for(int k=0;k<a.length;k++) {
for(int l=0;l<a.length;l++) {
for(int m=0;m<a.length;m++) {
if((i!=j&&i!=k&&i!=l&&i!=m)&&(j!=k&&j!=l&&j!=m)&&(k!=l&&k!=m)&&l!=m) {
int max=a[i][0]+a[j][1]+a[k][2]+a[l][3]+a[m][4];
if(max>maxsum)
maxsum=max;
}
}
}
}
}
}
System.out.println("最大评分是"+maxsum);
}}