解题思路:
可以用背包问题的思路解题,计算只买前i件商品时满0~j元最少的钱数,然后计算只买前i+1件商品时的情况。
定义数组count[][],count[i][j]表示前i件商品必须满j元时最小金额。
第 i 件商品价值 price[i],如果选择第 i 件商品,那么前i-1件商品必须满 j - price[i] 元;如果不选择第 i 件商品,那么前 i-1 件商品必须满 j 元。
所以动态规划方程为count[i][j]=Min(count[i-1][j],count[i-1][j-price[i]] + price[i])
java程序实现如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
int sum=sc.nextInt();
int[] price=new int[num];
for (int i = 0; i < price.length; i++) {
price[i]=sc.nextInt();
}
int[][] count=new int[num][sum+1];
for (int i = 1; i <= sum; i++) {
if (i<=price[0]) {
count[0][i]=price[0];
} el