题意:

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. 解决Android Studio下Element layer-list must be declared问题

    近期将一个项目从Eclipse转到Android Studio. 项目中使用了环信demo中的一些xml资源,转换后发现color资源目录下诸如layer-list或者shape等标签报Element ...

  2. jquery设置多个css样式

    $(selector).css({property:value, property:value, ...}) 实例: $("p").css({ "color": ...

  3. secureCRT与vim配置

    折腾了一天,给服务器新装了centos系统,用crt连接,vim用着很不习惯. 修改配色,快捷键啥的都不怎么起效. 后来发现.crt里的会话选项-终端-仿真 里配成xtream,使用颜色方案就可以了.

  4. 登录和注册(Js)的写法

    今天在做小组项目的时候发现登录和注册的使用不是很熟,记录下来: <script> //弹出框中的css部分 input { font-family: Arial, sans-serif;} ...

  5. Spring MVC之简单入门

    一.Spring MVC简介: 1.什么是MVC 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型(Model).视图(View)及控制器(Contr ...

  6. In Git, there are two main ways to integrate changes from one branch into another: the merge and the rebase.

    https://git-scm.com/book/en/v2/Git-Branching-Rebasing

  7. MFC获取电脑硬盘序列号(附源代码)

    在新建的project里面加入一个类  即:下面一个类  GetHDSerial.cpp <code class="hljs cs has-numbering" style= ...

  8. 2.alert() 函数

    ①alert() 函数在 JavaScript 中并不常用,但它对于代码测试非常方便. <!DOCTYPE html><html><body> <h1> ...

  9. 剑指Offer:链表中倒数第k个结点【22】

    剑指Offer:链表中倒数第k个结点[22] 题目描述 输入一个链表,输出该链表中倒数第k个结点. 解题思考 我们定义两个指针L和R,R事先移动K-1个位置,然后两者同时往后移动直到遇到R的下个节点为 ...

  10. 一些js及css样式

    人体时钟: 源码: <div> <embed wmode="transparent" src="https://files.cnblogs.com/fi ...