关注
来个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)); }
}
}
}
查看原帖
点赞 评论
相关推荐
牛客热帖
正在热议
# 25届秋招总结 #
299909次浏览 2653人参与
# 如果不工作真的会快乐吗 #
59078次浏览 516人参与
# 北方华创开奖 #
26486次浏览 285人参与
# 地方国企笔面经互助 #
3776次浏览 10人参与
# 美团求职进展汇总 #
1327056次浏览 12448人参与
# 选完offer后,你后悔学本专业吗 #
19826次浏览 143人参与
# 百度开奖 #
161903次浏览 972人参与
# 正在实习的你,几点下班 #
51773次浏览 388人参与
# 国央企薪资爆料 #
8220次浏览 67人参与
# 如何一边实习一边秋招 #
992004次浏览 12638人参与
# 提前批简历挂麻了怎么办 #
146391次浏览 1948人参与
# 学历or实习经历,哪个更重要 #
50940次浏览 402人参与
# 海康威视求职进展汇总 #
398741次浏览 3406人参与
# 米哈游求职进展汇总 #
175852次浏览 1458人参与
# 求职遇到的搞笑事件 #
70744次浏览 576人参与
# 投递实习岗位前的准备 #
1179064次浏览 18392人参与
# 面试体验感最好的是哪家? #
85052次浏览 845人参与
# 实习生应该准时下班吗 #
167394次浏览 1159人参与
# 得物求职进展汇总 #
66193次浏览 682人参与
# 网申一定要掌握的小技巧 #
5321次浏览 53人参与
# 招聘要求与实际实习内容不符怎么办 #
10252次浏览 273人参与
# 0offer是寒冬太冷还是我太菜 #
898086次浏览 8010人参与