关注
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
相关推荐
查看22道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
7386次浏览 105人参与
# 机械人避雷的岗位/公司 #
42185次浏览 280人参与
# 程序员找工作至少要刷多少题? #
13483次浏览 203人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1343次浏览 39人参与
# 我现在比当时_,你想录用我吗 #
6161次浏览 89人参与
# 过年最难忘的一件事 #
23100次浏览 174人参与
# 你最满意的offer薪资是哪家公司? #
69558次浏览 349人参与
# 为了减少AI幻觉,你注入过哪些设定? #
2865次浏览 97人参与
# 牛客AI体验站 #
5053次浏览 153人参与
# AI Coding的使用心得 #
3673次浏览 91人参与
# 找工作的破防时刻 #
253280次浏览 1962人参与
# 刚入职的你踩过哪些坑 #
5566次浏览 113人参与
# 论秋招对个人心气的改变 #
7586次浏览 132人参与
# 一张图晒一下你的AI员工 #
3787次浏览 82人参与
# 关于春招/暑期实习,你想知道哪些信息? #
5623次浏览 98人参与
# 黄金这个事上,你学到了什么 #
1388次浏览 41人参与
# 机械人你知道哪些单休企业 #
85568次浏览 428人参与
# 程序员能干到多少岁? #
7044次浏览 104人参与
# 晒晒你司的新年福利 #
5749次浏览 89人参与
# 关于提前批我想问 #
267666次浏览 2307人参与