HDU - 2844 Coins(多重背包+完全背包)
题意
给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值。
分析
对\(c[i]*a[i]>=m\)的币,相当于完全背包;\(c[i]*a[i]<m\)的币则是多重背包,考虑用二进制优化解决。最后扫一遍\(dp[i]\)统计答案。
import java.util.*;
import java.math.*;
public class Main{
static int MAXN = 100005;
static int []dp = new int[MAXN];
static int []a = new int [MAXN];
static int []c = new int [MAXN];
static int n,m;
static void zero(int w,int v) {
for(int i=m;i>=w;--i) {
dp[i] = Math.max(dp[i], dp[i-w]+v);
}
}
static void complete(int w,int v) {
for(int i=w;i<=m;++i) {
dp[i] = Math.max(dp[i], dp[i-w]+v);
}
}
static void multiple(int w,int v,int c) {
if(c * w >= m) {
complete(w,v);
return;
}
int k = 1;
while(k<=c) {
zero(k*w,k*v);
c -= k;
k <<= 1;
}
zero(c*w,c*v);
}
public static void main(String []args) {
Scanner cin = new Scanner (System.in);
while(cin.hasNext()) {
n = cin.nextInt();
m = cin.nextInt();
if(n==0 && m==0) break;
for(int i=0;i<=m;++i) dp[i]=-1;
dp[0] = 0;
for(int i=1;i<=n;++i) {
a[i] = cin.nextInt();
}
for(int i=1;i<=n;++i) {
c[i] = cin.nextInt();
multiple(a[i],a[i],c[i]);
}
int res=0;
for(int i=1;i<=m;++i) {
if(dp[i]==i) {
res++;
}
}
System.out.println(res);
}
cin.close();
}
}
HDU - 2844 Coins(多重背包+完全背包)的更多相关文章
- hdu 2844 Coins (多重背包+二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...
- HDU 2844 Coins (多重背包计数 空间换时间)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDu -2844 Coins多重背包
这道题是典型的多重背包的题目,也是最基础的多重背包的题目 题目大意:给定n和m, 其中n为有多少中钱币, m为背包的容量,让你求出在1 - m 之间有多少种价钱的组合,由于这道题价值和重量相等,所以就 ...
- hdu 2844 coins(多重背包 二进制拆分法)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
- hdu 2844 Coins 多重背包(模板) *
Coins Time Limit: 2000/1 ...
- 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)
作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
- hdu 2844 Coins (多重背包)
题意是给你几个数,再给你这几个数的可以用的个数,然后随机找几个数来累加, 让我算可以累加得到的数的种数! 解题思路:先将背包初始化为-1,再用多重背包计算,最后检索,若bb[i]==i,则说明i这个数 ...
- HDU 2844 Coins(多重背包)
点我看题目 题意 :Whuacmers有n种硬币,分别是面值为A1,A2,.....,An,每一种面值的硬币的数量分别是C1,C2,......,Cn,Whuacmers想买钱包,但是想给人家刚好的钱 ...
随机推荐
- docker学习-docker核心技术
镜像:集装箱 ---build 仓库:超级码头 ----ship 容器:运行程序的地方 ----run docker运行一个程序的过程:去仓库把镜像拉到本地,然后用一条命令把镜像运行起 ...
- Linux下安装配置SVN
1.检查系统上是否安装了SVN rpm -qa subversion 没有安装,则使用以下命令安装 yum -y install subversion 2.配置svn并启动svn服务 (1) 指定s ...
- hasattr() 、getattr() 、setattr()
hasattr(object, name) :用于判断一个对象中是否有指定的属性或方法,如果存在返回 True,否则返回 False getattr(object, name, [default]) ...
- Websphere停止服务不用输入账号密码
启用了安全性的WebSphere Application Server,在日常维护中经常在停止服务的时候需要输入用户名和密码.停止的方式如下:[root@was /]# /opt/IBM/WebSph ...
- Unity和虚幻的比较
很多人从Unity开始转向虚幻4了,我目前则相反,从研究使用虚幻4,回到了Unity 5上. 前端总结的Unity和Unreal 4的一些优缺点,自己做的对比图.就先放这里了. 其实,作为引擎,各有优 ...
- APP适配IOS8,iPhone6和Plus截图简要说明
本文转载至 http://blog.csdn.net/yongyinmg/article/details/41422873 原文:http://www.zcool.com.cn/article/ZMT ...
- oracle11g+win7没有listener服务
今天在win7上面安装oracle11g的时候,配置了listener后,lsnrctl start报错. 查看服务,也没有发现listener服务. 各位有没有遇见过这个情况啊!!!!!
- golang 小知识-持续更新中
Golang 中的指针 - Pointer Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,ar ...
- bootstrap之按钮和图片
一.按钮 类 描述 .btn 为按钮添加基本样式 .btn-default 默认/标准按钮 .btn-primary 原始按钮样式(未被操作) .btn-success 表示成功的动作 .btn-in ...
- Android中Log机制详解
Android中Log的输出有如下几种: Log.v(String tag, String msg); //VERBOSELog.d(String tag, String msg); ...