<题目连接>

题目大意:

一位同学想要买手表,他有n种硬币,每种硬币已知有num[i]个。已知手表的价钱最多m元,问她用这些钱能够凑出多少种价格来买手表。

解题分析:

很明显,这是一道多重背包的问题,下面是用二进制拆分的多重背包的万能模板。

#include <bits/stdc++.h>
using namespace std; const int INF = 1e9;
int n,m,val[],cnt[],dp[int(1e5+)]; void OneZeroPack(int m,int v,int value){ //01背包
for(int i=m;i>=v;i--)
dp[i]=max(dp[i],dp[i-v]+value);
} void CompletePack(int m,int v,int value){ //完全背包
for(int i=v;i<=m;i++)
dp[i]=max(dp[i],dp[i-v]+value);
} void MultiplePack(int m,int v,int value,int num){
if(v*num>=m) { CompletePack(m,v,value); return; } //如果这些物品总体积大于容量,当成完全背包计算
for(int k=;k<=num;k<<=){ //否则当成01背包,但是对这些物品进行二进制拆分
OneZeroPack(m,v*k,value*k);
num-=k;
}
if(num)OneZeroPack(m,v*num,value*num);
} int main(){
while(~scanf("%d%d",&n,&m),n||m){
for(int i=;i<=m;i++)dp[i]=-INF;
for(int i=;i<n;i++)scanf("%d",&val[i]);
for(int i=;i<n;i++)scanf("%d",&cnt[i]);
dp[]=;
for(int i=;i<n;i++)
MultiplePack(m,val[i],val[i],cnt[i]);
int ans=;
for(int i=;i<=m;i++)
if(dp[i]>)ans++;
printf("%d\n",ans);
}
}

另一种方法:

#include <cstdio>
#include <cstring> bool dp[];
int use[];//i元钱时某种钱用的次数
int n, m;
int val[], num[]; void solve()
{
memset(dp, , sizeof(dp));
dp[] = ;
int count = ;
for (int i = ; i <= n; i++) //此题解法就是,现将每一个物品*(1~num[i])所能达到的价格都标记
{
memset(use, , sizeof(use)); //每次初始化第i种钱用了0次
for (int j = val[i]; j <= m; j++) //顺序枚举钱数
{
if (dp[j - val[i]] && !dp[j] && use[j - val[i]] < num[i])
{
dp[j] = ; //如果钱数为i的情况记录过了,那么就标记,防止count重复+1
use[j] = use[j - val[i]] + ;//到达j元用的i种钱的次数是到达 j-val[i]元用的次数加1
count++;
}
}
}
printf("%d\n", count);
} int main()
{
while (~scanf("%d %d", &n, &m),n||m)
{
for (int i = ; i <= n; i++)
scanf("%d", &val[i]);
for (int i = ; i <= n; i++)
scanf("%d", &num[i]); solve();
}
return ;
}

HDU 2844 Coins 【多重背包】(模板)的更多相关文章

  1. hdu 2844 Coins (多重背包+二进制优化)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...

  2. HDu -2844 Coins多重背包

    这道题是典型的多重背包的题目,也是最基础的多重背包的题目 题目大意:给定n和m, 其中n为有多少中钱币, m为背包的容量,让你求出在1 - m 之间有多少种价钱的组合,由于这道题价值和重量相等,所以就 ...

  3. HDU - 2844 Coins(多重背包+完全背包)

    题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...

  4. hdu 2844 Coins 多重背包(模板) *

    Coins                                                                             Time Limit: 2000/1 ...

  5. HDU 2844 Coins (多重背包计数 空间换时间)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. hdu 2844 coins(多重背包 二进制拆分法)

    Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...

  7. HDU 2844 Coin 多重背包

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. 背包系列练习及总结(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 ...

  9. HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)

    HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...

  10. HDU 2191 珍惜现在,感恩生活(多重背包模板题)

    多重背包模板题 #include<iostream> #include<cstring> #include<algorithm> using namespace s ...

随机推荐

  1. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  2. 简单理解Zookeeper的Leader选举【转】

    Leader选举是保证分布式数据一致性的关键所在.Leader选举分为Zookeeper集群初始化启动时选举和Zookeeper集群运行期间Leader重新选举两种情况.在讲解Leader选举前先了解 ...

  3. python位运算之计算中位数

    # -*- coding: utf-8 -*- # @Time : 2018/11/23 10:49 PM # @Author : cxa # @File : 1.py # @Software: Py ...

  4. mybatis框架之foreach标签

    foreach一共有三种类型,分别为List,[](array),Map三种,下面表格是我总结的各个属性的用途和注意点. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径 ...

  5. 配置Sublime Text2的python运行环境(Sublime Text 3也类似)

    1. 前言 用Sublime Text 2 配置Python运用环境,有简单配置还有像IDLE一样的配置,本文分成第一部分和第二部分.   2. 配置 第一部分(简单配置)   1.只需要打开Pref ...

  6. 每天一个linux命令:scp命令

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  7. 基于Golang设计一套微服务架构[转]

      article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...

  8. OCM_第十七天课程:Section7 —》GI 及 ASM 安装配置 _管理和配置 GRID /实施 ASM 故障组 /创建 ACFS 文件系统

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  9. == 和 equal 区别

    在初学 Java 时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = new String(" ...

  10. Ant+Jmeter自动化接口测试的部署 及 部署过程中的坑

    一.环境准备: 1.Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html    配置环境变量-系统变 ...