hdu 2546 饭卡

HDU2546 饭卡 详解(01背包) 原题 HDU2546 饭卡 题意 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。 如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。 所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。 已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 思路 01背包。 与单纯... 阅读详情

题目:

Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。

Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。

n=0表示数据结束。

Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。

Sample Input
1
50
5
10
1 2 3 2 1 1 2 3 2 1
50
0

Sample Output
-45
32

思路:

跟前面那道题差不多,01背包问题。我开始以为把所有的钱加起来,题都没好好读,5元以下不能购买,5元及以上你想买啥买啥。我们用m-5,5元来处理所有菜中价格最贵的那个Max,剩下的m-5用来买菜,我们选出除开最贵菜之后,加起来用钱最多的,dp[m-5]。m-dp[m-5]-Max,即为所求。
dp[j]表示,当最大余额为j时,此时买菜用钱最多为。
dp[j]=max(dp[j],dp[j-price[i]]+price[i]);

我开始把最大菜价设变量名为max,结果max函数那行报错error C2064: 项不会计算为接受 2 个参数的函数,好久没写代码,一时还没反应过来哪错了。

代码:

#include <stdio.h>  
#include <string.h>  
#include <iostream>  
#include <algorithm>  
using namespace std;
using namespace std;
int dp[50*1005];
int price[1005];
int main()
{
    int N;
    while (scanf("%d", &N) && N){
        int Max = -1;
        memset(dp,0,sizeof(dp));
        for (int i = 0; i < N; i++){
            scanf("%d",&price[i]);
        }
        sort(price,price+N);
        Max = price[--N];
        int m,sum=0;
        scanf("%d",&m);
        if (m < 5){
            printf("%d\n",m);
            continue;
        }
        sum = m - 5;
        for (int i = 0; i < N; i++){
            for (int j = sum; j >= price[i]; j--){
                dp[j] = max(dp[j],dp[j-price[i]]+price[i]);
            }
        }
        printf("%d\n",m-dp[sum]-Max);
    }
    return 0;
}
hdu 2546 饭卡 dp 饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25502 Accepted Submission(s): 8912 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判 阅读详情

相关推荐

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1593

HDU-2546-饭卡

HDU-2546-饭卡 传送门 这道题就是普通背包问题。就是几个月下来太久没写题,我已经荒废了。 题目是中文题面,我就不过多说啦~ 这道题我们就直接处理,因为是想让饭卡里面的余额尽可能负的越多,题目中规定不足五块钱啥也干不了,所以我们就先保留五块钱出来,然后用剩下的钱尽可能的买能买到的东西,然后用剩下留下的五块钱买最贵的菜即可。当然我们这里特判一种特殊情况,如果我们的卡里本来就不足五块钱,那么我们就只能输出原来输入的钱。 所以dp[i]记录不超过i的价格中我们可以买的最贵的菜的总价格。 w[]数组中记录每种

qq_44624316的博客 237

Multisim实战:5分钟搞定一阶RC电路仿真(附示波器波形分析技巧)

本文通过Multisim软件,详细演示了如何快速搭建一阶RC电路并进行仿真分析。文章提供了从元件选取、电路连接、虚拟示波器设置到波形观测的完整流程,并重点分享了测量时间常数、区分电路响应类型等核心分析技巧,帮助电子工程初学者和爱好者高效掌握电路仿真与分析方法。

weixin_29175469的博客 182

动态规划 HDU 2546 饭卡

在acm群里看到了这样的一个题目,拿过来看了一下,感觉还蛮有意思的,题目大意是饭卡上有m余额,但是学校有个规定,饭卡余额少于5元就不能买东西,现在有n件商品,每件商品都有一个价格。要求买好商品后余额最少。         题目链接   HDU 2546 饭卡         看到题目就想到了背包问题,在一个m-5的背包里尽量装满东西,装满后放最后一个物品,解肯定在放完这个物品之后。 最直接的想

Jackie_Zhu的专栏 1597

保姆级教程:在Ubuntu 21.04上搞定USRP X410的UHD 4.1驱动与Gnuradio 3.9安装(含虚拟机网络避坑指南)

本文提供在Ubuntu 21.04上配置USRP X410的UHD 4.1驱动与Gnuradio 3.9的详细教程,涵盖虚拟机网络设置、依赖安装、源码编译及常见问题解决方案,帮助开发者高效搭建SDR开发环境。

weixin_27869497的博客 272

从零搭建宝兰德BES单机版:分离式安装、环境变量配置到控制台访问的避坑指南

本文详细介绍了从零搭建宝兰德BES单机版的完整流程,包括分离式安装、环境变量配置和控制台访问的避坑指南。针对中间件安装部署中的常见问题,提供了账号规划、JDK配置、实例创建和防火墙设置等实用解决方案,帮助开发者和运维人员高效完成BES中间件的部署工作。

weixin_32576389的博客 371

饭卡 HDU - 2546

饭卡 HDU - 2546 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 Input 多组数据。对于每组数据:...

Are_you_ready的博客 291

STM32输入捕获功能,同时捕获8路波形。

STM32输入捕获功能,使用TIM2和TIM3同时捕获8路波形。 工作上的一个需求,要采集两组控制步进电机的信号。就是采集8个通道的方波,测量频率和计脉冲个数。看起来简简单单的东西,磕磕碰碰搞了两天,走了一些弯路,这里写出来记录一下。顺便理解一下输入捕获个多种用法。 1. 硬件设计 首先看一下用到那些IO口。在STM32手册里找这样TIMx_CHx的就是输入捕获的口了。 这里用了TIM2的4个口和TIM3的4个口。 定义 端口 TIM2_CH1 PA0 TIM2_CH2 PA1 TI

qq_36353009的博客 5123

HDU 2546 饭卡 0-1背包

回顾下背包的问题先来最简单的0-1背包,HDU 2546 很裸的0-1背包。 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9005    Accepted Submission(s): 3089

凌风 1498

2025美赛C题奥运奖牌榜模型(附代码+全保姆教程)Models for Olympic Medal Tables

伟大教练”效应的测量方法定义奖牌变化率:−−​如果变化率显著为正,且超出历史平均增长率,则认为存在“伟大教练”效应。使用统计方法(如t检验)验证教练到来是否带来显著性差异。

博客 6371

基于四旋翼模型的火箭型无人机视线角保持控制仿真设计

本文针对火箭型无人机的视线角保持控制问题展开研究。基于四旋翼动力学模型,通过改造设计了一种摄像头朝上安装的特殊无人机系统,用于追踪空中目标。文章详细推导了坐标系定义、运动学和动力学方程,重点分析了摄像头安装与视线几何关系,建立了目标运动模型和视线向量计算方法。通过解算期望姿态角,实现了使机体Z轴始终对准目标的控制目标。仿真结果表明,该系统能有效完成视线角保持任务,为空对空监视等应用场景提供了可行方案。~~~~~

huanghm88的专栏 140

hdu 2546饭卡 01背包问题

hdu 2546 题目的连接如下: http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 23950    Accepted

狮子淡泊名利 746

如何在 Mac 上下载安装 Xcode——并为 iOS 开发更新它原文

下载 Xcode安装命令行工具打开新版本删除文件注意,我在下面的步骤中列出了一些终端命令。这些命令可以被输入到你现在的工作目录中。这意味着你不需要导航到任何特定的文件夹。如果你真的想这样做,你可以在输入下面的步骤中的命令之前先输入== cd==。这将使你返回到主文件夹。

专注于AI领域前沿知识,业余爱好开发软件 4666

hduoj 饭卡 java_饭卡 HDU - 2546

饭卡 HDU - 2546原题链接考察:01背包这道题懵逼半天,看了大佬的代码终于懂了点思路:这道题是和购买顺序有关的,我们先拿出最贵的菜,同时余额拿出5元,在剩余的余额尽可能买总和贵的菜.买完最后余额拿出的5元再买最贵的菜,这就是正解了....也因为这道题搞明白了点01背包的板子.f[i][j]表示在j余额条件下,前i个物品所能达到的最大价值.这道题如果设置f[i][j]==余额的话,表示的是在...

weixin_35241897的博客 265

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

HDU 2546 饭卡

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546

n-1 739

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

HDU 2546 饭卡(01背包)

题目链接: HDU 2546 饭卡 题意: 中文题意。 分析: 问题的核心就是在钱总数小于5之前尽可能的使金钱总数最小,然后用生下的>=5的钱去购买最贵的物品。 先将所有商品按价格排序,然后将最贵的保留,因为一定会购买它!而且最优的情况是用5元钱购买它! 所以问题就变成如何用v-5元钱去购买剩下的n-1件商品来获得最大总价值,这就是典型的01背包了。 注意: 当初始v<5时,什么都

ramay7 549

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

hdu 2546 饭卡(01背包)(变化了一小下)

hdu 2546 饭卡分析01背包的变种,题目就是说,有n种菜,饭卡剩m元,如何使饭卡剩的钱最少,当然有个限制,就是可以进行这次购买的前提是m要大于等于5元。 感觉自己思维还是太死了,就是因为这个大于5元的限制想了半天,其实可以想到,在还剩5元时,只要再买一次价钱最大的菜就可以了,那问题就转化为在有m-5元时,如何花最多的钱,也就是01背包问题。如果这样,就不用每次转换时考虑是不是大于5元了。要学

天道酬勤 355

hdu 2546 饭卡 01背包 Java

hdu 2546 饭卡 贪心 加 01 背包 因为要使最后的余额最少,而且还需要大于等于5元才能购买,所以倒数第二次购买后的钱一定要大于或等于 (余额-5),因此背包容量就是 (余额-5)。 把最贵的留到最后进行购买。 import java.util.Arrays; import java.util.Scanner; /** * @author wangshaoyu */ public class Hdu2546 { public static void main(String[] arg

weixin_46621409的博客 264

hdu_2546_饭卡(01背包)

题目连接:hdu_2546_饭卡 题意:中文,不解释 题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想 #include #define F(i,a,b) for(int i=a;i<=b;i++) using namespace std; inline void up(int &x,int y){if(x<y)x=y;} int n,a[1001],dp[1200

bin_gege的博客 319

HDU 2546 饭卡 基本的01背包

HDU 2546 饭卡 Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 2546 Appoint description: Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余

fans_ac的博客 411

【01背包】HDU 2546 饭卡

HDU 2546   饭卡                                                                                                                       饭卡Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/3276...

荷叶田田 378

HDU 2546 饭卡【01背包变形】

HDU 2546 饭卡 分析: 每种菜可买一次或者不买,所以是01背包 余额m&lt;5,只能买价格&lt;=余额的菜       无法购买 余额m=5,买最贵的菜 余额m &gt;5,先用(h=m-5)去买菜,再用5去买最贵的菜。h视为背包容量,菜的价格a[i]视为重量w和价值c。 //AC #include&lt;iostream&gt; #include&lt;algori...

不甘 195

饭卡 hdu 2546

饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7363    Accepted Submission(s): 2510 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前

风华绝代 797

HDU - 2546 - 饭卡(01背包)

HDU - 2546 - 饭卡 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 Input 多组数据...

Steve·Curcy 206
上一篇: hdu 1864 最大报销额
下一篇: hdu 2955 Robberies
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值