请问有没有大佬昨晚答了大疆b卷的软开的卷子

个人觉得1和3都是背包,但是没有写出来,想看一下代码,最好是java的。谢谢#大疆##笔试题目#
全部评论
第一题01背包public static int ks(int[] day, int[] value, int day1) {             int size = day.length;             if (size == 0) {                 return 0;             }             int[][] dp = new int[size][day1 + 1];             for (int i = 0; i <= day1; i++) {                 dp[0][i] = day[0] <= i ? value[0] : 0;             }             for (int i = 1; i < size; i++) {                 for (int j = 0; j <= day1; j++) {                     dp[i][j] = dp[i - 1][j];                     if (day[i] <= j) {                         dp[i][j] = Math.max(dp[i][j], value[i] + dp[i - 1][j - day[i]]);                     }                 }             }             return dp[size - 1][day1];         }         public static void main(String[] args) {             Scanner scan=new Scanner(System.in);             int num=scan.nextInt();             for(int i=0;i<num;i++) {                 int num1=scan.nextInt();                 int day=scan.nextInt();                 int[] value=new int [num1];                 int []day1=new int[num1];                 for(int j=0;j<num1;j++) {                      value[j]=scan.nextInt();                      day1[j]=scan.nextInt();                 }                 System.out.println(ks(day1,value,day));             }         } 第三题我是用的递归求解约束判断  因为会重复的 所有我先存了一下判断,代码比较low 不 喜勿喷 public static void main(String[] args) {         // TODO Auto-generated method stub         Scanner scan=new Scanner(System.in);         int num1=scan.nextInt();         int num2=scan.nextInt();         int [] price=new int[num2];         for(int i=0;i<num2;i++) {             price[i]=scan.nextInt();         }         int like=scan.nextInt();         int []likeall=new int[like];         for(int i=0;i<like;i++) {             likeall[i]=scan.nextInt()-1;         }         int []count=new int[num2];         int []countall=new int[1];         countall[0]=0;         int [] []flagg=new int[1000][num2];         int []nums={0};         dfs(num1,price,count,likeall,countall,flagg,nums);         System.out.print(countall[0]);     }      public static void dfs(int num,int []price,int []count,int []like,int []countall,int[][]flagg,int[] nums) {          for(int i=0;i<price.length;i++) {              num=num-price[i];              count[i]++;              if(num<0){                  count[i]--;                  return;              }              if(num==0) {                  int flag=1;                  for(int j=1;j<like.length;j++) {                        if(count[like[j]]-count[like[j-1]]>=0) {                            flag=0;                        }                  }                  if(flag==1) {                      for(int q=0;q<flagg.length;q++) {                          int flags=0;                          for(int y=0;y<count.length;y++) {                              if(flagg[q][y]!=count[y]) {                                  flags=1;                                  break;                              }                          }                          if(flags==0) {                              count[i]--;                              return;                          }                      }                      for(int x = 0;x<count.length;x++) {                          flagg[nums[0]][x]=count[x];                      }                      nums[0]++;                      countall[0]++;                  }                  count[i]--;                  return ;              }              if(num>0) {                  dfs(num,price,count,like,countall,flagg,nums);                  count[i]--;                  num=num+price[i];              }          }          return;      }
点赞 回复 分享
发布于 2019-08-07 17:08

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
5
分享
牛客网
牛客企业服务