题目链接:https://cn.vjudge.net/problem/HDU-2844

题意

给你一些不同价值和一定数量n的硬币。

求用这些硬币可以组合成价值在[1 , m]之间的有多少。

思路

多重背包问题,看了一眼数据范围,用二进制优化一下物品数量即可。

提交过程

AC

代码

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100+20, maxm=1e5;
int num[maxn], cost[maxn], val[maxn];
int dp[maxm];
int n, m; void zeroKnap(int cost, int val){
for (int i=m; i>=cost; i--)
dp[i]=max(dp[i], dp[i-cost]+val);
} void compKnap(int cost, int val){
for (int i=cost; i<=m; i++)
dp[i]=max(dp[i], dp[i-cost]+val);
} int main(void){
while (scanf("%d%d", &n, &m)==2 && n+m){
for (int i=1; i<=n; i++) scanf("%d", &cost[i]);
for (int i=1; i<=n; i++) scanf("%d", &num[i]); memset(dp, 0, sizeof(dp));
for (int i=1; i<=n; i++){
if (num[i]*cost[i]>=m)
compKnap(cost[i], cost[i]);
else{
for (int k=1; k<num[i]; k*=2){
zeroKnap(cost[i]*k, cost[i]*k);
num[i]-=k;
}
zeroKnap(cost[i]*num[i], cost[i]*num[i]);
}
} int ans=0;
for (int i=1; i<=m; i++)
if (dp[i]==i) ans++;
printf("%d\n", ans);
} return 0;
}
Time Memory Length Lang Submitted
234ms 1596kB 1108 G++ 2018-08-21 05:13:40

HDU-2844 Coins 多重背包 物品数量二进制优化的更多相关文章

  1. HDU 1059(多重背包加二进制优化)

    http://acm.hdu.edu.cn/showproblem.php?pid=1059 Dividing Time Limit: 2000/1000 MS (Java/Others)    Me ...

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

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

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

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

  4. HDu -2844 Coins多重背包

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

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

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

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

    Coins                                                                             Time Limit: 2000/1 ...

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

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

  8. 动态规划:HDU2844-Coins(多重背包的二进制优化)

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

  9. dp之多重背包(二进制优化)

    void solve(int v,int w,int c){    int count=0;    for(int k=1;k<=c;k<<=1)    {        val[c ...

随机推荐

  1. css3实现滚动手表

    静态html: <!DOCTYPE html><html> <head> <meta charset="utf-8" /> < ...

  2. 51nod1072 - 威佐夫游戏【威佐夫博弈】

    有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...

  3. 使用shell脚本定时执行备份mysql数据库

    使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...

  4. Tensorflow原理通用

    使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图.使用 tenso ...

  5. spring bean的作用域和自动装配

    1 Bean的作用域 l  singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象  默认是单列 l  prototype原型: 每次获取bean都产生一个新的对象,比如Ac ...

  6. Redis,Memcache的区别和具体应用场景

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...

  7. C#中的Attribute定义及用法

    1.Attribute定义 公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .N ...

  8. 计算机网络系统--Microsoft Lync 与 腾讯通RTX 对比(转载)

    原文网址: http://it.vsharing.com/226.html ------------------------------- 上海大学统一通信平台现在尚未实施,一直在测试微软的Lync. ...

  9. POJ 2184

    简单的01背包,把S看体积,把F看价值,把它们变正数处理就可以了.在处理负数时,因为减一个负数相当于加一个,所以要从前往后. #include <iostream> #include &l ...

  10. Android 经常使用设计模式(一)

    由于项目变更的频繁性,作为一名程序猿,我们须要掌握设计模式的必要性.就不言而喻~~.以下就是一些我自己学习的设计模式总结. 接下来,主要是针对几个比較经常使用模式进行解说,主要是以下几种: 观察者模式 ...