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

思路分析:该问题为0-1背包问题的变形题;问题求余额最少,设开始的余额为V,则求得用V-5可以买到的菜的最大价值,最后留下的5元则用来买菜价最高的菜,可以证明这种购买方式是能够产生最优解的;另外,因为题目要求所有的菜只能买一次,所以在求V-5能买最多价值的菜时不能买菜价最高的菜,因为菜价最高的菜一定是用剩下的5元钱来购买的;

代码如下:

import java.util.*;

public class Main {
static final int MAX_N = 1000 + 10;
static int[] c = new int[MAX_N];
static int[] dp = new int[MAX_N]; static int Max(int a, int b) {
return a > b ? a : b;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N, V; while ((N = in.nextInt()) != 0) {
int max_value = 0; Arrays.fill(dp, 0);
for (int i = 0; i < N; ++ i) {
c[i] = in.nextInt();
if (c[i] > max_value)
max_value = c[i];
}
Arrays.sort(c, 0, N);
V = in.nextInt();
for (int i = 0; i < N - 1; ++ i) {
for (int v = V - 5; v >= c[i]; -- v) {
dp[v] = Max(dp[v], dp[v - c[i]] + c[i]);
}
}
if (V < 5)
System.out.println(V);
else
System.out.println(V - dp[V-5] - c[N - 1]);
}
}
}

hdoj 2546 饭卡(0-1背包)的更多相关文章

  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. HDOJ 2546饭卡(01背包问题)

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

  4. hdu 2546 饭卡 (01背包)

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

  5. hdu 2546 饭卡【01背包】

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

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

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

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

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

  8. hdoj 2546 饭卡

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

  9. HDU 2546.饭卡-动态规划0-1背包

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

随机推荐

  1. Linux网络管理——网关作用

    1. 网络基础 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...

  2. ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据

    前端HTML+JQuery  备注Jquery需要1.x版本,不能用2.x版本 1.引入必要文件及上传input <load file="__PUBLIC__/js/jquery-1. ...

  3. Windows系统环境下一个Apache运行多个PHP版本

    我个人机器上环境是基于Apache2.2运行的PHP5.2/4,如你想部署其他版本的PHP或在更多的版本之间切换,同理操作步骤是一致的. 依本人环境为例,机器上已经安装了PHP5.2版本, 所以首先重 ...

  4. 点语法、property、self注意

    1.点语法(找出不合理的地方)#import <Foundation/Foundation.h>@interface Person : NSObject{    int _age;}- ( ...

  5. 走进C标准库(1)——assert.h,ctype.h

    默默觉得原来的阅读笔记的名字太土了,改了个名字,叫做走进C标准库. 自己就是菜鸟一只,第一次具体看C标准库,文章参杂了对<the standard C library>的阅读和对源码的一些 ...

  6. J2SE知识点摘记(十七)

    1.        Applet Applet的生命周期分为四个阶段,各阶段分别由init,start,stop和destroy四种方法来具体体现. public void init() 此方法通知A ...

  7. Delphi中TFlowPanel实现滚动条效果

    由于TFlowPanel中没有设置滚动条的相关属性.所以我们只好另辟溪径.再加一个tscrollbox来实现. 具体操作如下: 1,先添加一个Tscrollbox,设置其align为alclient. ...

  8. 交通银行万事达Y-POWER信用卡 普卡

    签账消费 免息尽享 失卡保护 风险全无 密码签名 任选 境外使用 本币还款 国内海外 环球支持 适合人群:年轻一族 发行状态:发行中     年费: 140元 币种: 人民币+美元 免年费政策:免首年 ...

  9. 【OpenCV新手教程之十二】OpenCV边缘检測:Canny算子,Sobel算子,Laplace算子,Scharr滤波器合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/25560901 作者:毛星云(浅墨) ...

  10. 栈的实现 -- 数据结构与算法的javascript描述 第四章

    栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...