• hihocoder [Offer收割]编程练习赛4


     

    hihocoder [Offer收割]编程练习赛4

    描述

    最近天气炎热,小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

    这是一道非常显然的 背包问题。 直接使用 背包问题的经典解法即可。

    #include <iostream>
    #include <cstdio> 
    #include <cstdlib> 
    #include <cstring>
    using namespace std;
    const int maxn = 101;
    
    int n,x,dp[maxn]; 
    
    
    int main(){
    	//freopen("in.txt", "r", stdin); 
    
    	int i,j,ans,  num[maxn]; 
    	while(scanf("%d %d", &n, &x) != EOF){
    		for(i=0; i<n; i++){
    			scanf("%d", &num[i]); 
    		}
    		memset(dp, 0, sizeof(dp));
    		dp[0] = 1; 
    		for(i=0; i<n; i++){
    			for(j=maxn-1; j>=num[i]; j--){
    				if(dp[j-num[i]]){
    					dp[j] = 1; 
    				}
    			}
    		}
    		ans = -1; 
    		for(i=x; i<maxn; i++){
    			if(dp[i]){
    				ans = i;
    				break; 
    			}
    		}
    		printf("%d", ans); 
    	}
    	return 0; 
    }
    
  • 相关阅读:
    Datasource Server returns invalid timezone问题
    springboot之异常处理
    maven的安装配置
    Javajdk的安装
    jdbc连接mysql数据库 (idea)
    关于MySQL数据库的卸载
    python3.6.8的安装及初步使用
    计算机基础及编程语言的简单了解
    git、码云的使用
    粘滞位权限
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/5747111.html
Copyright © 2020-2023  润新知