第一题:P1048 [NOIP2005 普及组] 采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
package 蓝桥算法训练__普及组.Day2;
import java.util.Scanner;
/**
* @author snippet
* @data 2023-02-12
* P1048 [NOIP2005 普及组] 采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
*/
// 01背包
public class T1 {
static int T,M;// T表示采药总时间,M表示山洞中药的数量
static int[] time = new int[110];// time数组存该药的采药时间
static int[] val = new int[110];// val数组存该药的价值
static int N = 1010;
static int[]dp = new int[N];// dp[i]存的数据表示 时间为i时 采的药的最大价值
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
T = sc.nextInt();
M = sc.nextInt();
for (int i = 1; i <= M; i++) {
time[i] = sc.nextInt();
val[i] = sc.nextInt();
}
for (int i = 1; i <= M; i++) {
// 数据dp时应该逆序dp 不然有些数据会重复放入
for (int j = T; j >= 0; j--) {
// 表示可以放入背包的数据
if (j >= time[i]) {
dp[j] = Math.max(dp[j-time[i]]+val[i], dp[j]);
}
}
}
System.out.println(dp[T]);
}
}

第二题:P1616 疯狂的采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
package 蓝桥算法训练__普及组.Day2;
import java.util.Scanner;
/**
* @author snippet
* @data 2023-02-12
* P1616 疯狂的采药 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
*/
// 完全背包
public class T2 {
static int T,M;
static int[] time = new int[10100];
static int[] val = new int[10100];
static long[] dp = new long[10000100];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
T = sc.nextInt();
M = sc.nextInt();
for (int i = 1; i <= M; i++) {
time[i] = sc.nextInt();
val[i] = sc.nextInt();
}
for (int i = 1; i <= M; i++) {
// 完全背包 数据可以重复放入背包中
for (int j = time[i]; j <= T; j++) {
dp[j] = Math.max(dp[j-time[i]]+val[i], dp[j]);
}
}
System.out.println(dp[T]);
}
}

package 蓝桥算法训练__普及组.Day2;
import java.util.Scanner;
/**
* @author snippet
* @data 2023-02-06
* AcWing-1015. 摘花生
*/
public class T3 {
public static void main(String[] args) {
// 输入
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
while (T-- > 0) {
int R = sc.nextInt();
int C = sc.nextInt();
int[][] a = new int[R+1][C+1];
int[][] ans = new int[R+1][C+1];
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
a[i][j] = sc.nextInt();
}
}
// dp
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
ans[i][j] = Math.max(ans[i-1][j], ans[i][j-1]) + a[i][j];
}
}
System.out.println(ans[R][C]);
}
}
}

第四题:P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
package 蓝桥算法训练__普及组.Day2;
import java.util.Scanner;
/**
* @author snippet
* @data 2023-02-12
* P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
*/
//01背包
public class T4 {
static int n,m;// n表示花的种类,m表示花的盆数
static int mod = 1000007;
static int[] a = new int[110];// a数组里面存第i种花的盆数
static int[] dp = new int[110];// dp数组中存i盆花 摆花的方式的数量
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
dp[0] = 1;
for (int i = 1; i <= n; i++) {
// 01背包
for (int j = m; j >= 0; j--) {
for (int k = 1; k <= Math.min(a[i], j); k++) {
dp[j] = (dp[j] + dp[j-k])%mod;
//System.out.println("dp["+j+"]"+dp[j]);
}
}
}
System.out.println(dp[m]);
}
}
