TH7 牛妹的春游

描述

给出两个正整数x,y,另给出若干个数对[ai,bi,ci],请挑选若干数对使得挑出的数对ai的和不小于x,bi的和不小于y,计算挑出数对的ci的和的最小值

注:

每个数对只能挑选一次,x和y均小于2000

示例1

输入:

5,60,[[3,36,120],[10,25,129],[5,50,250],[1,45,130],[4,20,119]]

返回值:

249

说明:

挑选第一和第二个数对  

备注:

每种大包装只能最多买一个,所需面包breadNum、饮料的总量beverageNum均不超过2000牛妹一定能找到满足要求的方案让大家能够出游。

以下是Java代码实现:


import java.util.*;

public class Main {
    public static int minCost(int x, int y, int[][] pairs) {
        int[][] dp = new int[x + 1][y + 1];
        for (int[] pair : pairs) {
            int a = pair[0];
            int b = pair[1];
            int c = pair[2];
            for (int i = x; i >= a; i--) {
                for (int j = y; j >= b; j--) {
                    dp[i][j] = Math.max(dp[i][j], dp[i - a][j - b] + c);
                }
            }
        }
        return dp[x][y];
    }

    public static void main(String[] args) {
        int x = 5;
        int y = 60;
        int[][] pairs = {{3, 36, 120}, {10, 25, 129}, {5, 50, 250}, {1, 45, 130}, {4, 20, 119}};
        int result = minCost(x, y, pairs);
        System.out.println(result);
    }
}

代码解释:

  1. 定义一个minCost()函数,用于计算挑选数对的ci的和的最小值。
  2. 定义一个dp数组,用于记录挑选数对的ci的和的最小值。
  3. 遍历数对,更新dp数组的值。
  4. 返回dp[x][y]的值。
  5. 在main()函数中,调用minCost()函数,并输出结果。

你可能感兴趣的:(算法)