第一题:55%正确率package org.example;import java.util.Scanner;public class Main {public static boolean flag ;public static void main(String[] args) {int m;Scanner sc = new Scanner(System.in);m =sc.nextInt();while (m-->0){flag =true;int N = sc.nextInt();int n = sc.nextInt();int c =sc.nextInt();int arr[]=new int[n];for(int i=0;i<n;i++){arr[i]=sc.nextInt();}int dp[]=new int[N+1];if(N==0){System.out.println(&quot;YES&quot;);continue;}dfs(N,n,c,arr,0,0);if(flag){System.out.println(&quot;NO&quot;);}else{System.out.println(&quot;YES&quot;);}}}public static void dfs(int N,int n,int c,int arr[],int v,int step){if(step==n){return;}if(v>N)return;if(v+c>=N){flag=false;return;}dfs(N,n,c,arr,v+arr[step],step+1);dfs(N,n,c,arr,v,step+1);}}这个是dfs,听说有的人剪到了100%,第二题:100%package org.example;import java.util.Arrays;import java.util.Scanner;public class Main2 {public static void main(String[] args) {int m ;Scanner sc = new Scanner(System.in);m = sc.nextInt();while (m-- > 0) {int k = sc.nextInt();int[]b1=new int[k];int[] b2=new int[k];for(int i=0;i<k;i++){b1[i]=sc.nextInt();}for(int i=0;i<k;i++){b2[i]=sc.nextInt();}int[]a1=new int[k];int[] a2=new int[k];for(int i=0;i<k;i++){a1[i]=b1[k-1-i];a2[i]=b2[k-1-i];}boolean flag=work(b1,b2,k);if(flag){System.out.println(&quot;YES&quot;);continue;}flag=work(a1,a2,k);if(flag){System.out.println(&quot;YES&quot;);continue;}System.out.println(&quot;NO&quot;);}}private static boolean work(int[] a, int[] b, int n) {boolean tip = true;int c[]=new int[n];for(int i =0;i<n;i++){if(i==0){c[i]=Math.min(a[i],b[i]);}else{if(a[i]<c[i-1]&amp;&amp;b[i]<c[i-1]){tip = false;break;}else if(a[i]>=c[i-1]&amp;&amp;b[i]>=c[i-1]){c[i]=Math.min(a[i],b[i]);}else if(a[i]>=c[i-1]){c[i]=a[i];}else if (b[i]>=c[i-1]){c[i]=b[i];}}}return tip;}}左边扫一下,右边扫一下,就相当于一个升序的一个降序的,可以进行模拟然后贴一下别人ak的链接:https://www.nowcoder.com/discuss/666334391592910848?sourceSSR=users欢迎大家和我分享第一题的解法~~~,和你的疑惑(求生:这个不是zuobi,已经比赛完了,球球不要把我关进小黑屋)