最后没有时间了,也不知道这个能不能过................ 用的是把所有的钱放到一个数组里,然后dfs加回溯,一旦发现满足条件的,就把组合的size保存起来。 import java.util.ArrayList; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { static int[] coins = {1, 5, 10, 20, 50, 100};     private static String process(String num1, String num2){         String[] arr = num1.split(" ");         int[] nums = new int[arr.length];         for(int i=0;i<coins.length;i++) {          nums[i] = Integer.parseInt(arr[i]);         }         int target = Integer.parseInt(num2);                  ArrayList<Integer> tmp = new ArrayList<>();         for(int j=0;j<nums.length;j++) {      for(int k=0;k<nums[j];k++)      tmp.add(coins[j]);      }                  ArrayList<Integer> res = new ArrayList<>();         ArrayList<Integer> path = new ArrayList<>();         hepler(res, tmp, target, 0, 0, path);         int num = 0;         for(int val:res) {          num += val;         }         return num+"";              }     private static void hepler(ArrayList<Integer> res, ArrayList<Integer> coins, int target, int pos, int sum, ArrayList<Integer> path) { if(sum == target) { res.add(path.size()); return; } if(sum > target) return; Set<Integer> set = new HashSet<>(); for(int i=pos;i<coins.size();i++) { if(set.contains(coins.get(i))) continue; set.add(coins.get(i)); path.add(coins.get(i)); hepler(res, coins, target, i+1, sum+coins.get(i), path); path.remove(path.size()-1); } } public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         String strValueSequences = sc.nextLine();         String strChargeNum = sc.nextLine();         String sum = process(strValueSequences, strChargeNum);         System.out.println(sum);     } }
点赞 1

相关推荐

06-04 18:37
门头沟学院 Java
勇敢的ssr求对象:前面看的有点奔溃,看到只有你是真玩啊,忍不住笑出了声😂
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务