题意:

n,m

给出A1,A2,A3...AN;C1,C2,C3...CN;

给出硬币的价值和个数,问在1-M中间能构造出多少个组合

思路:

n种物品的价值,n种物品的个数;

一种物品能组成多种物品的0/1背包

#include<bits/stdc++.h>
using namespace std; const int N=1e2+10;
const int M=100000+10; int n,m;
int val[N],num[N];
bool dp[M]; void Oneorzero(int v)
{
for(int i=m;i>=v;i--)
if(dp[i-v])
dp[i]=true;
} void Complete(int v)
{
for(int i=v;i<=m;i++)
if(dp[i-v])
dp[i]=true;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m) break;
for(int i=1;i<=n;i++)
scanf("%d",&val[i]);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
int k,v;
dp[0]=true;
for(int i=1;i<=m;i++)
dp[i]=false;
for(int i=1;i<=n;i++)
{
if(num[i]*val[i]>=m)
Complete(val[i]);
else
{
k=1;
while(k<=num[i])
{
v=val[i]*k;
Oneorzero(v);
num[i]-=k;
k<<=1;
}
v=val[i]*num[i];
Oneorzero(v);
}
}
int ans=0;
for(int i=1;i<=m;i++)
if(dp[i])
ans++;
printf("%d\n",ans);
}
return 0;
}

HDU2844【背包问题(二进制优化)】的更多相关文章

  1. HDU 2844 Coins 背包问题 + 二进制优化

    题目大意:某个人有n种硬币,每种硬币价值为v,数量为c,问在总价值不超过m的条件下,最多有多少种组合方式. 题目思路: 1.对于某种硬币 如果v*c 大于 m,就意味着无论取多少枚硬币,只要总价值不大 ...

  2. HDU-2844 Coins 多重背包 物品数量二进制优化

    题目链接:https://cn.vjudge.net/problem/HDU-2844 题意 给你一些不同价值和一定数量n的硬币. 求用这些硬币可以组合成价值在[1 , m]之间的有多少. 思路 多重 ...

  3. 5. 多重背包问题 II 【用二进制优化】

    多重背包问题 II 描述 有 NN 种物品和一个容量是 VV 的背包. 第 ii 种物品最多有 sisi 件,每件体积是 vivi,价值是 wiwi. 求解将哪些物品装入背包,可使物品体积总和不超过背 ...

  4. 动态规划:HDU1059-Dividing(多重背包问题的二进制优化)

    Dividing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  5. hdu2844 Coins -----多重背包+二进制优化

    题目意思:给出你n种硬币的面额和数量,询问它能够组合成1~m元中的几种情况. 这题如果直接按照完全背包来写的话,会因为每一种硬币的数目1 ≤ Ci ≤ 1000而超时,所以这里需要运用二进制优化来解决 ...

  6. 51nod1086 背包问题 V2——二进制优化

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...

  7. 51nod 多重背包问题(二进制优化)

    有N种物品,每种物品的数量为C1,C2......Cn.从中任选若干件放在容量为W的背包里,每种物品的体积为W1,W2......Wn(Wi为整数),与之相对应的价值为P1,P2......Pn(Pi ...

  8. 51nod 1086 背包问题 V2(二进制优化多重背包)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 题解:怎么用二进制优化多重背包,举一个例子就明白了. ...

  9. hdu 1171 Big Event in HDU(多重背包+二进制优化)

    题目链接:hdu1171 思路:将多重背包转为成完全背包和01背包问题,转化为01背包是用二进制思想,即件数amount用分解成若干个件数的集合,这里面数字可以组合成任意小于等于amount的件数 比 ...

  10. hdu 2191 (多重背包+二进制优化)

    Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...

随机推荐

  1. 互联网时代的精准招聘-Uber新手游有感

    找工作难.招人也难.漫天的简历,全是求职者广撒网式的复制粘贴,如何找到合适的人.会认真对待职位的人?或许你须要换换思路,看看Uber新出的手机游戏能够咱啥启发. Uber在过去5年已经蹭蹭成长为估值5 ...

  2. csslint

    http://csslint.net/ line column title description browserwarning 1 1 Disallow @import @import preven ...

  3. FireMonkey 结构性初略分析

    Delphi 下的FireMonkey,很好地实现了 DirectUI与跨平台.学习了解他,对DirectUI编程及项目的跨平台实现有一定帮助.虽然作为开发者个体,并不需要了解太多这些东西,只要求拿来 ...

  4. docker: docker安装和镜像下载

    1 安装docker的apt源 apt-get install apt-transport-https ca-certificates curl software-properties-common ...

  5. appium(10)-iOS predictate

    iOS predictate It is worth looking at ’-ios uiautomation’ search strategy with Predicates. UIAutomat ...

  6. c++中class与struct的区别

    0. 结构是一种用关键字struct声明的自定义数据类型.与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型. 1.结构在堆栈中创建,是值类型,而类是引用类型.每当需要一种 ...

  7. ubuntu12.04出现ERROR: Removing 'hello': Device or resource busy和insmod: error inserting 'hello.ko': -1 Device or resource busy解决方案

    一:insmod时候错误: 1:错误信息insmod: error inserting 'hello.ko': -1 Device or resource busy 2:原因:你的代码里面的设备号和系 ...

  8. Ace(二)Demo示例

    Client: #include "ace/Log_Msg.h" #include "ace/OS.h" #include "ace/Service_ ...

  9. 常用的ES6

    1 let 和 const 作用域: 只在声明指令的块级作用域内有效.① let所声明的变量可以改变,值和类型都可以改变,没有限制. let a = 123 a = 456 // 正确,可以改变 le ...

  10. 跟我一起学wpf(1)-布局

    wpf常用的布局控件 Canvas,DockPanel,Grid,StackPanel,WrapPane 1 Canvas是常用的画布容器,里面可以包含多个比如之前我写的3D效果的动画,都是用Canv ...