小米笔试0919
算法卷 两个代码题
第一题带c个1的背包问题 100
第二题 两个数组可以交换对应位置问能不能得到递增或递减数组 100
第一题带c个1的背包问题 100
第二题 两个数组可以交换对应位置问能不能得到递增或递减数组 100
全部评论
我也用0-1背包写的,为啥卡18%啊🤔️想问问佬怎么写的
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
while (T>0){
T--;
int n = in.nextInt();
int[] a = new int[n];
int[] b = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
for (int i = 0; i < n; i++) {
b[i] = in.nextInt();
}
int k = 0;
int preNum = -1;
boolean flag = true;
//尝试升序
while(k<n){
if(a[k]<preNum && b[k]<preNum){
flag = false;
break;
}
if(a[k]<b[k]){
if(a[k]>=preNum){
preNum = a[k];
}else{
preNum = b[k];
}
}else {
if(b[k]>=preNum){
preNum = b[k];
}else {
preNum = a[k];
}
}
k++;
}
if (flag){
System.out.println("YES");
continue;
}else{
//尝试降序
flag = true;
preNum = Integer.MAX_VALUE;
k=0;
while(k<n){
if(a[k]>preNum && b[k]>preNum){
flag = false;
break;
}
if(a[k]>b[k]){
if(a[k]<=preNum){
preNum = a[k];
}else{
preNum = b[k];
}
}else {
if(b[k]<=preNum){
preNum = b[k];
}else {
preNum = a[k];
}
}
k++;
}
if(flag){
System.out.println("YES");
}else{
System.out.println("NO");
}
}
}
}
public static void main1(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while (t>0){
t--;
int N,n,c;
N = in.nextInt();
n = in.nextInt();
c = in.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
if(dfs(a,0,c,N)) System.out.println("YES");
else System.out.println("NO");
}
}
static boolean dfs(int[] a,int index,int c,int res){
if(res<=c) return true;
if(index>=a.length) return false;
boolean flag = false;
if(res>= a[index]){
flag = dfs(a,index+1,c,res-a[index]);
}
if(flag) return flag;
flag = dfs(a,index+1,c,res);
return flag;
}
大佬能私一下第一题的代码吗?
为啥我第二题python写的只过45,感觉也没写错啊
相关推荐
09-09 14:55
广东理工学院 嵌入式工程师 点赞 评论 收藏
分享