hdu 2546-饭卡
来源:互联网 发布:mac u盘安装win7教程 编辑:程序博客网 时间:2024/05/20 10:20
饭卡
Description
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
Input
多组数据。对于每组数据:
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。
n=0表示数据结束。
第一行为正整数n,表示菜的数量。n<=1000。
第二行包括n个正整数,表示每种菜的价格。价格不超过50。
第三行包括一个正整数m,表示卡上的余额。m<=1000。
n=0表示数据结束。
Output
对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
Sample Input
1505101 2 3 2 1 1 2 3 2 1500
Sample Output
-4532
01背包问题,首先拿出5元买最贵的东西,那接下来就是背包容量为m-5,物品数量为n-1 的01背包问题了。为了方便,用sort排序,动态转移方程
为dp[j]=max(dp[j],dp[j-v[i]]+v[i]).
代码参考:
#include <iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>#include<queue>using namespace std;int main(){ int n; while(~scanf("%d",&n),n) { int v[1005],dp[1005]; int m,i,j,k; memset(v,0,sizeof(v)); for(i=0;i<n;i++) scanf("%d",&v[i]); scanf("%d",&m); if(m<5) { printf("%d\n",m); continue; } sort(v,v+n); k=m-v[n-1]; memset(dp,0,sizeof(dp)); for(i=0;i<n-1;i++) for(j=m-5;j>=v[i];j--) dp[j]=max(dp[j],dp[j-v[i]]+v[i]); printf("%d\n",k-dp[m-5]); } return 0;}
阅读全文
0 0
- HDU 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡(背包)
- Hdu 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡 DP
- hdu 2546 饭卡
- HDU 2546 饭卡
- HDU 2546 饭卡
- HDU-2546-饭卡
- hdu 2546 饭卡
- hdu 2546 饭卡
- 饭卡 hdu 2546
- hdu 2546 饭卡
- 【SQL两表关联级联】两张表关联,统计级联数量ORACLE
- 非空判断的个人理解
- 基于内容的推荐算法(推荐系统)(四)(完结,不填坑了
- poj 1932(最长路Bellman_Ford
- CentOS 7下安装Mysql
- hdu 2546-饭卡
- Linux笔记(2)-目录树结构
- git http/https方式储存密码
- 软中断域硬中断
- String类不可变性的好处
- 二叉树求深度的递归的详细分析
- Qt中QObject QApplication Qwidget QDialog等等都是什么关系??
- date(w) 输出后对应的周几不对的问题
- 58 同城 iOS 客户端 Hybrid 框架探索