饭卡 [ HDU - 2546 ]

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

电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于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

题意:

换了问法的背包问题。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int s[1010],dp[1010];
int m,n;

int cmp(int a,int b)       //从小到大
{
    return a<b;
}

int main()
{
    while(~scanf("%d",&n),n)
    {
        memset(dp,0,sizeof(dp));
        
        for(int i = 1; i <= n; i ++)
            scanf("%d",&s[i]);
            
        sort(s+1,s+n+1,cmp);
        
        scanf("%d",&m);

        if(m<5)  //小于5,直接输出
        {
            printf("%d\n",m);
            continue;
        }

        int maxx=s[n];      //zuidazhi
        m-=5;

        for(int i = 1; i < n; i ++)
            for(int j = m; j >= s[i]; j --)
                dp[j]=max(dp[j],dp[j-s[i]]+s[i]);

        printf("%d\n",m+5-dp[m]-maxx);
    }
    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 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判 阅读详情

相关推荐

解锁 STP 与 SOLIDWORKS 转换密码:工具及迪威在线转换秘籍

STP 文件能够完整地记录 3D 模型的几何形状、尺寸、公差、材料属性等丰富信息,无论是简单的机械零件,还是复杂的装配体,都能精准呈现。而在线转换以迪威模型为例,凭借便捷性、高效性和安全性,为广大 3D 专业技术人员和学生党在无需安装额外软件的情况下,轻松实现格式转换提供了有力支持。在实际工作和学习中,可根据自身具体情况灵活选择合适的转换方式,以确保 3D 设计工作流程的顺畅进行,让创意在不同格式间自由流动并绽放光彩。在 3D 设计与建模的广袤世界里,不同格式文件间的转换常常是连接创意与实现的关键桥梁。

技术说明博主 3444

HDU 2546 饭卡 (动态规划01背包)

http://acm.hdu.edu.cn/showproblem.php?pid=2546 先用5元钱买最贵的东西,然后用剩下的钱买价值最大的东西,也就是01背包问题。 先进行排序,找出最大的,然后对剩下的商品进行动态规划,而顺序不影响。 参考博客:http://blog.youkuaiyun.com/juststeps/article/details/8714303 #include #

Benjamin_Z的博客 1364

关于【中孚计算机终端保密检查系统】的卸载

卸载中孚计算机终端保密检查系统

码农之路,向死而生 4万+

HDU - 2546 饭卡

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

hpu风之旅 229

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 458

理解ADC:为什么需要抗混叠滤波器?

本文介绍 ADC 的混叠现象,引出抗混叠滤波器,并介绍一种开关电容滤波器,它具有很小的增益过渡带。

疯狂的运放 5939

HDU - 2546 饭卡

饭卡 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买

acm_1361677193的专栏 1655

基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇

如何高效学习Java? 毕业设计项目应该怎么做?入门实战项目应该怎么做? 做Java开发都应该学习哪些框架技术? 我想来跟你聊聊为什么要学习此专栏?我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,当你迷茫想努力没有方向时,最事半功倍的方法是:找人带你! 因为过来人,更懂得如何学、如何做、如何少走弯路! 那今天就给大家带来一门专栏课程,由 天罡gg 和 经海路大白狗 两位实力大牛合力打造的一款专栏,可以让你从0到1快速拥有企业级规范的项目实战经验!

天罡gg的专栏 2万+

hdu2546饭卡(背包)

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

ACMan 793

OMAPL138使用UPP读写测试

UPP测试代码 #include "hw_types.h" // 宏命令 #include "hw_syscfg0_OMAPL138.h" // 系统配置模块寄存器 #include "soc_OMAPL138.h" // DSP C6748 外设寄存器 #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明 #include "interrupt.h" // DSP C6748 中断相关应用程序接...

wangjie36的博客 1193

知识蒸馏⚗️ | YOLOv5知识蒸馏实战篇

YOLOv5知识蒸馏教程

Coding... 9361

HDU-2546-饭卡

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

qq_44624316的博客 237

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

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

动态规划 HDU 2546 饭卡

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

Jackie_Zhu的专栏 1597

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

饭卡 HDU - 2546

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

Are_you_ready的博客 291

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

狮子淡泊名利 747

hduoj 饭卡 java_饭卡 HDU - 2546

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

weixin_35241897的博客 265

hdu 2546 饭卡

hdu 2546 饭卡         01背包... #include #include #include using namespace std; #define MAX 1005 int dp[MAX], c[MAX]; int n, v; inline int max(int a, int b) { return a > b ? a : b; } inline void

happen_zhang 644

HDU 2546 饭卡

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

n-1 739

HDU 2546 饭卡(01背包)

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

ramay7 549

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
上一篇: Two Strings Swaps 【CodeForces - 1006D】
下一篇: 搬寝室 [HDU - 1421]
Daisy's一乐景三
博客等级 码龄8年 2粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值