关注
import java.util.Arrays;
//第二题:照着大神改的小demo,加了点注释.
//dp[i][j] 行,当前歌曲,列,所求和,值,选择数
//dp[i][j] = (dp[i - 1][j] + dp[i - 1][j - A])
//和为k的选择数 = 放x前的 和为k的选择数 + 放x前的 和为(k-x) 的选择数.
//i-1代表放x前,即上一次. j-a 代表和为k-x
public class Main2_2 {
public static void main(String[] args) {
int K = 5;
int A = 2;
int X = 3;// X首长度为A的
int B = 3;
int Y = 3; // Y首长度为B的
// - 0 1 2 3 4 5 (k)
// 0
// 2
// 2
// 2
// 3
// 3
// (X+Y)
int dp[][] = new int[X + Y + 1][K + 1];
// 初始化
for (int i = 0; i < X + Y + 1; i++) {
dp[i][0] = 1;
}
for (int i = 1; i < X + Y + 1; i++) {
for (int j = 1; j < K + 1; j++) {
if (i <= X) {
if (j < A) {
// 在不能放A的时候:J-A越界了怎么办
dp[i][j] = dp[i - 1][j];
} else {
// i<=X 就要-A
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - A];
}
} else {
if (j < B) {
// 在不能放B的时候:J-B越界了怎么办
dp[i][j] = dp[i - 1][j];
} else {
// X<=i<=X+Y+1 就要-B
dp[i][j] = dp[i - 1][j] + dp[i - 1][j - B];
}
}
}
}
for (int i = 0; i < X + Y + 1; i++) {
System.out.println(Arrays.toString(dp[i]));
}
}
}
查看原帖
点赞 2
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
03-06 14:58
电子科技大学 算法工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 设计人如何选offer #
98204次浏览 687人参与
# 找工作,行业重要还是岗位重要? #
7363次浏览 96人参与
# 五一之后,实习真的很难找吗? #
45119次浏览 320人参与
# 盲审过后你想做什么? #
12524次浏览 113人参与
# 外包能不能当跳板? #
22128次浏览 191人参与
# 领导秒批的请假话术 #
9793次浏览 74人参与
# 考研可以缓解求职焦虑吗 #
20874次浏览 247人参与
# 五一假期,你打算“躺”还是“卷”? #
28370次浏览 416人参与
# 找工作前vs找工作后的心路变化 #
7163次浏览 64人参与
# 硬件人,你被哪些公司给挂了 #
46602次浏览 722人参与
# 面试等了一周没回复,还有戏吗 #
115486次浏览 1074人参与
# 大疆的机械笔试比去年难吗 #
69585次浏览 603人参与
# 应届生薪资多少才合理? #
3079次浏览 24人参与
# 牛友们的论文几号送审 #
27200次浏览 623人参与
# 写简历别走弯路 #
714289次浏览 7850人参与
# 你喜欢工作还是上学 #
37526次浏览 411人参与
# 如果有时光机,你最想去到哪个年纪? #
43257次浏览 766人参与
# 如何缓解入职前的焦虑 #
171901次浏览 1267人参与
# 如果不工作真的会快乐吗 #
101086次浏览 866人参与
# 每人推荐一个小而美的高薪公司 #
72835次浏览 1357人参与