金山云第二题,最后一分钟写的也没机会放上去了!!!!!!!!
我急死了我急死了
思路:x可以取a,b,c,对应的花费的value为1,2,3,可以理解为left=t-3-lose*value,left可以由除了x以外的剩下两个怎么组成,找出组合最小的和最大的即可。
心得:从此以后,只信自己。
public class num2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
char x = in.next().charAt(0);
int v = in.nextInt();
int t = in.nextInt();
System.out.println(getans(x+"",v,t));
}
public static String getans(String x,int lose,int t){
//去除成功的结果
t=t-3;
//t由1到3组成
//几个3 几个2 几个1
if(x.equals("a")){
ans=new ArrayList<>();
t=t-lose*1;
Path=new int[3];
//不需要考虑a
Path[0]=lose;
gg(0,t,0);
}
if(x.equals("b")){
ans=new ArrayList<>();
t=t-lose*2;
Path=new int[3];
//不需要考虑a
Path[1]=lose;
gg(0,t,1);
}
if(x.equals("c")){
ans=new ArrayList<>();
t=t-lose*3;
Path=new int[3];
//不需要考虑a
Path[2]=lose;
gg(0,t,2);
}
Integer max=Integer.MIN_VALUE;
Integer min=Integer.MAX_VALUE;
for(int n:ans){
max=Math.max(max,n);
min=Math.min(min,n);
}
return max+" "+min;
}
public static int[] Path;
public static List<Integer> ans;
public static void gg(int sum,int target,int noneed){
if(sum>target){
return;
}
if(sum==target){
ans.add(Path[0]+Path[1]+Path[2]);
return;
}
if(noneed==0){
Path[1]=Path[1]+1;
sum=sum+2;
gg(sum,target,noneed);
sum=sum-2;
Path[1]=Path[1]-1;
Path[2]=Path[2]+1;
sum=sum+3;
gg(sum,target,noneed);
sum=sum-3;
Path[2]=Path[2]-1;
}
if(noneed==1){
Path[0]=Path[0]+1;
sum=sum+1;
gg(sum,target,noneed);
sum=sum-1;
Path[0]=Path[0]-1;
Path[2]=Path[2]+1;
sum=sum+3;
gg(sum,target,noneed);
sum=sum-3;
Path[2]=Path[2]-1;
}
if(noneed==1){
Path[0]=Path[0]+1;
sum=sum+1;
gg(sum,target,noneed);
sum=sum-1;
Path[0]=Path[0]-1;
Path[1]=Path[1]+1;
sum=sum+2;
gg(sum,target,noneed);
sum=sum-2;
Path[1]=Path[1]-1;
}
}
}
