应该是0-1背包问题吧 :这样不知行不行。 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); int sum =0 ; int[] data = new int[n]; for (int i = 0; i < n ; i++) { data[i] = sc.nextInt(); sum +=data[i]; } int m = sc.nextInt(); Arrays.sort(data); if (m<0||data[0]>m||sum<m) System.out.println("-1"); int[][] dp = new int[n+1][m+1]; for (int i = 0; i <=m ; i++) { dp[0][i] = 1; } for (int i = 0; i <dp.length; i++) { dp[i][0] = 1; } for (int i = 1; i <n+1 ; i++) { for (int j = 1; j <=m ; j++) { if (j >=data[i-1]) dp[i][j] = Math.max(dp[i-1][j],dp[i-1][j-data[i-1]]*data[i-1]); else dp[i][j] = dp[i-1][j]; } } System.out.println(dp[n][m]); }
点赞 评论

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务