金山云第二题,最后一分钟写的也没机会放上去了!!!!!!!!
我急死了我急死了
思路: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; } } }