🍑 算法题解专栏
🍑 C语言网 潜水员
输入
5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
输出
249
import java.util.Scanner;
public class Main
{
static int N = 100;
static int[][] f = new int[N][N];
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();// 氧气
int n = sc.nextInt();
int k = sc.nextInt();
// 初始化DP数组(处理非法情况)
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
f[i][j] = 0x3f3f3f3f;//极大值不影响求最小值结果
f[0][0] = 0;
while (k-- > 0)
{
int v1 = sc.nextInt();// 氧气
int v2 = sc.nextInt();
int w = sc.nextInt();
for (int i = m; i >= 0; i--)
for (int j = n; j >= 0; j--)
f[i][j] = Math.min(f[i][j], f[Math.max(i - v1, 0)][Math.max(j - v2, 0)] + w);
}
System.out.println(f[m][n]);
}
}
👨🏫 背包思路大总结