设饭卡余额为total
此题经分析 可以得出:要求选出一些饭菜 时消费量尽量接近total-5元 然后再买一个饭菜 以达到透支。。。

可以证明 最后买的那个饭菜是饭菜中价值最大的.
证明

设a1 a2 a3...an-1 an 为各饭菜的价格  设an的价格最大


sum=total-5
a1+a2+a3+...an-2+an-1+an=M
a1+a2+a3+...+an-2+an-1=x1          最后加an (按5元为界限)此时超额(an-1)-(sum-x1)=an-sum+a1+a2+...+an-2+an-1元                1
a1+a2+a3+...+an-2+an=x2             最后加an-1(按5元为界限)此时超额(an)-(sum-x2)=(an-1)-sum+a1+a2+...+an-2+an元              2

1式-2式=2*((an)-(an-1))>0
所以1式超额更多
所以最后选价格最大的那个饭菜得证

此题注意一点: 如果余额total本身就少于5元  直接输出total     此时没法买东西了  这种特殊情况要判断

动态规划
01背包问题 背包总量为余额-5  每个背包价值和重量都为w

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define max(a,b) a>b?a:b

int cmp(const void *a,const void *b)

{


return *(int*)a-*(int*)b;

}

int main()

{


int n,a[5000],i,bb[5000],m,j;


while(scanf("%d",&n),n!=0)


{


memset(bb,0,sizeof(bb));


for(i=0;i<n;i++)


scanf("%d",&a[i]);


scanf("%d",&m);


qsort(a,n,sizeof(a[0]),cmp);


if(m<5)


{


printf("%d\n",m);


continue;


}


memset(bb,0,sizeof(bb));


m=m-5;


bb[0]=0;


for(i=0;i<n-1;i++)


{


for(j=m;j>=a[i];j--)


{


bb[j]=max(bb[j],bb[j-a[i]]+a[i]);


}


}


printf("%d\n",m+5-bb[m]-a[n-1]);


}


return 0;

}

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

 

hdu 2546 饭卡(背包)的更多相关文章

  1. HDOJ(HDU).2546 饭卡(DP 01背包)

    HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...

  2. HDU 2546 饭卡(01背包)

    题目代号:HDU 2546 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/ ...

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

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

  4. HDU 2546 饭卡(0-1背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 题意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金 ...

  5. HDU 2546 饭卡(01 背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 思路:需要首先处理一下的的01背包,当饭卡余额大于等于5时,是什么都能买的,所以题目要饭卡余额最小, ...

  6. hdu 2546 饭卡 (01背包)

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  7. hdu 2546 饭卡【01背包】

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

  8. 题解报告:hdu 2546 饭卡(01背包)

    Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...

  9. hdu 2546 饭卡 删除一个数的01背包

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

随机推荐

  1. py-faster-rcnn代码阅读1-train_net.py & train.py

    # train_net.py#!/usr/bin/env python # -------------------------------------------------------- # Fas ...

  2. TCP长连接和短连接的区别【转】

    转自:https://www.cnblogs.com/onlysun/p/4520553.html 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, ...

  3. Visual Studio 2013/2015/2017快捷键(转)

    英文原文:19 Must-Know Visual Studio Keyboard Shortcuts 项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = ...

  4. eclipse安装阿里巴巴java开发规范插件

    阿里巴巴java开发规范插件 作为JAVA开发人员,始终没有一个明确的规范,何为好代码,何为坏代码,造成不同人的代码风格不同,接手别人代码后改造起来相当困难.前不久,阿里巴巴发布了<阿里巴巴Ja ...

  5. 使用netperf测试网络性能

    1.安装netperf 1)获取netperf安装包 netperf-2.7.0.tar.bz2 2)解压到本地目录 3)进入netperf-2.7.0,执行:./configure 4)编译执行:m ...

  6. *使用配置类定义Codeigniter全局变量

    之前提到的 CodeIgniter 引入自定义公共函数 这篇文章提到了公共函数实现,全局的变量也可以借助 helper 函数来实现.不过,更为合适的方式可能要属用配置类定义了. CodeIgniter ...

  7. hdu 5427(排序水题)

    排序 年轻的排前面 名字中可能有空格 Sample Input21FancyCoder 19962FancyCoder 1996xyz111 1997 Sample OutputFancyCoderx ...

  8. 常用的服务发现对比(Consul、zookeeper、etcd、eureka)

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论:   Feature Consul Zookeeper Etcd Eureka 服务健康检查  服务状态,内存,硬盘等  (弱)长连接 ...

  9. django 使用 request 获取浏览器发送的参数

    django 使用 request 获取浏览器发送的参数     转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...

  10. 011.MySQL双主多从+Keepalived配置

    一 基础环境 主机名 系统版本 MySQL版本 主机IP Master01 CentOS 6.8 MySQL 5.6 172.24.8.10 Master02 CentOS 6.8 MySQL 5.6 ...