关注
来个java版的 全ac的背包
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); int money = sc.nextInt(); List<Integer> list = new ArrayList<>(); while (sc.hasNext()) {
list.add(sc.nextInt()); } int[] cost = new int[list.size() / 2]; int[] earn = new int[list.size() / 2]; int[] chosen = new int[list.size() / 2]; for (int i = 0; i < list.size(); ++i) { if (i < list.size() / 2) {
cost[i] = list.get(i); chosen[i] = 0; } else {
earn[i - list.size() / 2] = list.get(i); }
} // d[i][j]表示前i个物品放入容量为j的背包的最大价值 // d[i][j] = max(d[i-1][j], d[i-1][j-weights[i]] + values[i]) int[][] d = new int[cost.length][money + 1]; for (int i = 0; i < d.length; ++i) { for (int j = 1; j < money + 1; ++j) { if (i == 0) { if (cost[i] <= j) {
d[i][j] = cost[i]; }
} else { if (j >= cost[i]) {
d[i][j] = Math.max(d[i - 1][j], d[i - 1][j - cost[i]] + earn[i]); } else {
d[i][j] = d[i - 1][j]; }
}
}
} int ii = cost.length - 1, jj = money; while (ii >= 0) { if (ii > 0) { if (jj-cost[ii] >= 0 && d[ii][jj] == d[ii - 1][jj - cost[ii]] + earn[ii]) {
chosen[ii] = 1; jj -= cost[ii]; }
} else { if (cost[ii] <= jj) {
chosen[ii] = 1; }
}
ii--; } boolean first = true; for (int i = 0; i < chosen.length; ++i) { if (chosen[i] == 1) { if (first) {
System.out.print(i + 1); first = false; } else {
System.out.print(" " + (i + 1)); }
}
}
}
查看原帖
点赞 评论
牛客热帖
更多
正在热议
更多
# 如何KTV领导 #
31196次浏览 253人参与
# 研究所笔面经互助 #
55058次浏览 394人参与
# 掌阅春招 #
88680次浏览 513人参与
# 你投递的公司有几家约面了? #
39041次浏览 227人参与
# 软开人,秋招你打算投哪些公司呢 #
66877次浏览 715人参与
# 生物制药/化工校招攻略 #
33750次浏览 265人参与
# 软件开发春招备战日记 #
57545次浏览 492人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
72481次浏览 538人参与
# 如何缓解入职前的焦虑 #
141560次浏览 1126人参与
# 你遇到过哪些神仙同事 #
45070次浏览 424人参与
# 你最近一次加班是什么时候? #
31761次浏览 249人参与
# vivo求职进展汇总 #
167834次浏览 1020人参与
# 产品每日一题 #
29021次浏览 404人参与
# 考研人,我有话说 #
14498次浏览 278人参与
# 你今年的平均薪资是多少? #
94216次浏览 461人参与
# TP-LINK工作体验 #
38491次浏览 786人参与
# 还记得你第一次面试吗? #
75839次浏览 1094人参与
# 上班苦还是上学苦呢? #
201301次浏览 1235人参与
# 想给25届机械人的秋招建议 #
22476次浏览 202人参与
# 在职场上,你最讨厌什么样的同事 #
10613次浏览 125人参与
# 秋招白月光 #
52666次浏览 775人参与