蔚来笔试
1.三个for循环 直接全部过,要注意越界问题,用long
2.递归int f(int now,int target){},这道题要注意越界,用long
public static long f(long now,long target)
{
if(now>target){return Integer.MAX_VALUE;}
if(now==target){return 0;}
int l=f(now*a,target);
int r=f(now*b,target);
int temp=Math.min(l,r);
if(temp!=Integer.MAX_VALUE)
{
return temp+1;
}
else{
return Integer.MAX_VALUE;
}
} 3.需要先根据费用排序,然后暴力递归,f(int[][] arr,int index,int k,LinkedList<Integer> fee)。没排序只过了50%超时了。。
public class Weilai {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); int k = sc.nextInt();
int[][] arr=new int[n][2];
for(int i=0;i<n;i++)
{
arr[i][0]=sc.nextInt();
arr[i][1]=sc.nextInt();
}
LinkedList<Integer> fee = new LinkedList<>();
Arrays.sort(arr,(o1, o2)->{return o1[0]-o2[0];}); System.out.println(f(arr,0,k,fee));
}
public static long f(int[][] arr, int index, int k, LinkedList<Integer> fee)
{
if(index>=arr.length)
{ return 0L; }
for(int i:fee)
{
if(Math.abs(arr[index][0]-i)>=k){return 0L;}
}
long l=0; long r=0;
fee.addLast(arr[index][0]);
l=f(arr,index+1,k,fee)+arr[index][1];//选择当前
fee.removeLast();
r=f(arr,index+1,k,fee);//不选择当前
return Math.max(l,r);
}
} 