hdoj 2546 饭卡(0-1背包)
题目链接: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背包)的更多相关文章
- HDOJ(HDU).2546 饭卡(DP 01背包)
HDOJ(HDU).2546 饭卡(DP 01背包) 题意分析 首先要对钱数小于5的时候特别处理,直接输出0.若钱数大于5,所有菜按价格排序,背包容量为钱数-5,对除去价格最贵的所有菜做01背包.因为 ...
- HDU 2546 饭卡(01背包)
题目代号:HDU 2546 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/ ...
- HDOJ 2546饭卡(01背包问题)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如 ...
- hdu 2546 饭卡 (01背包)
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
- hdu 2546 饭卡【01背包】
题目链接:https://vjudge.net/contest/103424#problem/C 饭卡 Time Limit: 5000/ ...
- HDU 2546 饭卡(0-1背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 题意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金 ...
- 题解报告:hdu 2546 饭卡(01背包)
Problem Description 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负) ...
- hdoj 2546 饭卡
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- HDU 2546.饭卡-动态规划0-1背包
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
随机推荐
- 文件上传input type="file"样式美化
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- C#递归树
protected void Page_Load(object sender, EventArgs e) { bindtree(PopId); } private void bindtree() { ...
- [转]iOS UIAppearance使用详解
在iOS 5以前,自定义原生控件的外观并没有原生支持,因此开发人员感觉很麻烦.开发人员经常面临的问题是修改一个控件所有实例的外观.解决这个问题的正确方法是重写一遍控件.但由于这么做非常费时,一些开发人 ...
- WPF 三态按钮(PNG贴图)
原文 http://blog.csdn.net/power_YQ/article/details/7177183 <Window.Resources> Style x:Key=" ...
- Google Maps API V2
1. 在AndroidManifest.xml的application节点中,添加Google play service的版本号: <meta-data android:name="c ...
- poj2388---求奇数个数字的最中间的数
#include <stdio.h> #include <stdlib.h> int cmp(const void *a,const void *b) { return (*( ...
- 文档onload处理程序
//第一种方式是注册onload事件处理代码, //onload事件会在页面或图像加载完成后立即发生.这意味着onload事件的执行时间是在 //document对象和document对象所关联的所有 ...
- 对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
在程序中调用C++链接库中的回调函由于没有考虑生命周期,直接写委托回随机的被gc给回收掉导致报这个错误 错误的程序: private void InitPlateIdentify() { try { ...
- openwrt看IP流量
可以利用iptable来实现的,看附件的脚本. 把他放到路由器里面,然后运行. #!/bin/sh echo "Collecting data..." echo "&qu ...
- input 输入验证
js验证输入框内容 只能输入英文 只能输入英文 无法粘贴,右键不会弹出粘贴菜单 只能输入数字: 只能输入数字,小数点: 只能输入数字,小数点,下划线: 只能输入英文和数字: 只能输入汉字: 禁止输入法 ...