Faith


私信TA

用户名:1310510120

访问量:42367

签 名:

求介绍工作

等  级
排  名 217
经  验 6351
参赛次数 1
文章发表 54
年  龄 0
在职情况 学生
学  校 武汉生物工程学院
专  业

  自我简介:


这题代码是参考别人的,


参考代码:

import java.util.Arrays;
import java.util.Scanner;
public class 砝码称重 {
public static int n;
public static int a[];
public static int k[];
public static int flag;
public static int mg;
 public static void main(String[] args) {
  Scanner in=new Scanner(System.in);
  n=in.nextInt();
  int m=in.nextInt();
  a=new int[n];//n个砝码用数组a表示,
  k=new int[n+1];
  int temp=0;
  for(int i=0;i<n;i++)
  {
   a[i]=in.nextInt();
  }
  Arrays.sort(a);
  for(int i=n-1;i>=0;i--){//从右边往左数,用了i个砝码,剩下的砝码重量之和
   k[i]=k[i+1]+a[i];
  }
  //m个物品用数组b表示
  for(int i=0;i<m;i++)
  { 
  flag=0;
  mg=in.nextInt();
 
  
   dfs(0,0);
   if(flag==1)System.out.println("YES");
   else System.out.println("NO");
  }
 }
 private static void dfs(int sum,int i) {//i表示砝码数组下标
 if(flag==1){return;}
 if(sum==mg){flag=1;return;}
 if(Math.sqrt(sum)-mg>=k[i]){return;}//现在砝码的重量减去物品重量大于剩余砝码重量,推出循环
  for(i=i;i<n;i++){
   
   dfs(sum+a[i],i+1);
   dfs(sum-a[i],i+1);
   
  }
  
 }
 
}

 

 

0.0分

3 人评分

  评论区

为什么代码39行那要开方了在减
2020-03-08 17:02:42
砝码不一定只放在右边,左边也可以放。比如有19,3,1这三个砝码,是可以称质量为18的物体:18(物体)+1(砝码)=19(砝码)。
2018-03-08 20:23:48
  • «
  • 1
  • »