关注
来个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)); }
}
}
}
查看原帖
点赞 评论
相关推荐
12-09 00:19
清华大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
6048次浏览 64人参与
# 大学最后一个寒假,我想…… #
69312次浏览 704人参与
# 百融云创求职进展汇总 #
22902次浏览 152人参与
# 0经验如何找实习? #
16757次浏览 316人参与
# 度小满求职进展汇总 #
17149次浏览 86人参与
# 你开始找寒假实习了吗? #
9570次浏览 144人参与
# 你找工作经历过哪些骗局? #
6224次浏览 109人参与
# 你今年做了几份实习? #
5018次浏览 74人参与
# 字节出了豆包coding模型 #
5002次浏览 54人参与
# 实习越久越好,还是多多益善? #
12950次浏览 130人参与
# 25年找工作是什么难度? #
9342次浏览 98人参与
# 大厂面试初体验 #
82124次浏览 371人参与
# 一上班就想____,这正常吗? #
3209次浏览 63人参与
# 刚工作,应该先搞钱or搞成长? #
4983次浏览 68人参与
# 离职你会和父母说吗? #
6519次浏览 87人参与
# 面试尴尬现场 #
199979次浏览 758人参与
# 机械校招之路总结 #
107905次浏览 2042人参与
# 实习必须要去大厂吗? #
168790次浏览 1664人参与
# 产品每日一题 #
73696次浏览 670人参与
# 大家每天通勤多久? #
62448次浏览 399人参与
# 实习心态崩了 #
93912次浏览 488人参与
