满减优惠

题目1 : 满减优惠

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

最近天气炎热,小Ho天天宅在家里叫外卖。他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元。并且如果消费总计满X元,还能享受优惠。小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低。

你能算出这一餐小Ho最少消费多少元吗?

输入

第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100)

第二行包含N个整数A1, A2, ..., AN。(1 <= Ai <= 100)

输出

输出最少的消费。如果小Ho把N道菜都买了还不能达到X元的优惠标准,输出-1。

样例输入

10 50
9 9 9 9 9 9 9 9 9 8

样例输出

53
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);

		int N = scanner.nextInt();
		int X = scanner.nextInt();

		int[] input = new int[N + 1];
		int total = 0;

		for (int i = 1; i < N + 1; i++) {
			input[i] = scanner.nextInt();
			total += input[i];
		}

		int bag = total - X;

		if (bag < 0) {
			System.out.println(-1);
		} else {
			int[][] dp = new int[bag + 1][N + 1]; // dp[bag][N]

			for (int i = 1; i < N + 1; i++) {

				for (int j = bag; j >= 0; j--) {

					if (j >= input[i])
						dp[j][i] = Math.max(dp[j][i - 1], dp[j - input[i]][i - 1] + input[i]);
					else
						dp[j][i] = dp[j][i - 1];
				}
			}

			System.out.println(total - dp[bag][N]);
		}

		scanner.close();
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_38970751/article/details/86242849
今日推荐