Problem 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

代码:

#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
using namespace std;
int dp[1005];
int main()
{
    int n,m,a[1005],i,j,k;
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        memset(dp,0,sizeof(dp));
        memset(a,0,sizeof(a));
        for(i=0;i<n;i++)
            cin>>a[i];
        cin>>m;
        if(m<5)//如果金额小于5,什么也不能买
        {
            printf("%d\n",m);
            continue;
        }
        else
        {
            sort(a,a+n);//排序
            dp[0]=0;
            for(i=0;i<n-1;i++)
            {
                for(j=m-5;j>=a[i];j--)
                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);//除去最大的菜后最多能买菜所花的金额
            }
            printf("%d\n",m-(dp[m-5]+a[n-1]));卡里金额减掉除去最大的菜后最多能买菜所花的金额和最大的菜所花的金额
        }
    }
    return 0;
}

HDU——2546 饭卡相关推荐

  1. HDU 2546 饭卡(01背包裸题)

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU 2546 饭卡 01背包变形

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  3. hdu 2546 饭卡【贪心+01背包基础题】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=2546 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. hdu 2546 饭卡(P01-背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 转载请注明出处:http://blog.csdn.net/u012860063 饭卡 Time ...

  5. HDU 2546 饭卡(贪心+DP)

    题目链接 几个月之前做的一个题了,开始想时就看出应该是个01背包问题,又发现不太一样,貌似应该是有种贪心策略,把最大的挑出来最后还有5块钱的再买,剩下的体积用01背包去求最优选择,当时WA了3次,以为 ...

  6. hdu 2546 饭卡——一道简单的 01背包

    今天讲的是动态规划,学长们拉了13道题让我们做一下,一下午大概4小时,做了5道题(还是太弱了 摊手) 题意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上 ...

  7. Hdu 2546 饭卡

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. hdu 2546 饭卡【01背包】

    题目链接:https://vjudge.net/contest/103424#problem/C 饭卡                                Time Limit: 5000/ ...

  9. hdu 2546 饭卡(01背包)

    题意:只要最后留下的钱够5元,就可以买下最贵的食物,使得余额最低,其他的钱的使用就是一个最大背包问题了. 代码: #include<iostream> #include<cstrin ...

最新文章

  1. SQL Server 行转列,列转行
  2. 使用stream类型的Result实现Ajax
  3. pypthon3精要(13)-变量命名规则之下划线
  4. DPCM 压缩系统的实现和分析
  5. php操作外部文件,php文件操作-将其他文件的数据添加到本文件中
  6. 解决安装XMind出现Invalid Configuration Location The configuration area at ‘C:\Users\Administrator\Applicat
  7. python编码格式有哪些_Python JSON编解码的方式有哪些
  8. leetcode208. 实现 Trie (前缀树)
  9. LC_ALL: cannot change locale (en_US.UTF8)问题解决
  10. h5在微信自定义分享php,h5页面自定义微信分享
  11. Windows中彻底卸载MySQL
  12. fiddler 的AutoRespoder的使用(手动添加测试桩)
  13. 十个C语言项目,从小白到月入10K
  14. Latex 带圈数字
  15. 离散数学-欧拉图和哈密顿图
  16. android 多媒体播放 MediaSession 框架
  17. 常用数学希腊符号读法
  18. 单片机一个IO口如何控制两个发光二极管LED
  19. 写给文奇的阿里云建站教程
  20. 全球及中国连续性肾脏替代治疗机行业发展趋势及前景规划分析报告2022-2027

热门文章

  1. 2011的总结(感谢自己,感恩他人)【转自我的新浪博客】
  2. 定制任务栏托盘的dll
  3. 从语言之争到年龄焦虑
  4. Oracle函数——字符函数
  5. 笔记本电脑怎样当无线服务器,笔记本当无线路由器怎么设置【详细步骤】
  6. java录入会员信息_Java编程语言基础 第三章 实现会员信息录入功能
  7. c#计算标准偏差实现跟excel中一样的STDEVP()
  8. HDU6438-Buy and Resell(贪心、思维题)
  9. Buy and Resell HDU - 6438(补)更新贪心
  10. 设计模式之桥接模式:如何实现抽象协议与不同实现的绑定?