给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数。

Input

多组数据,每组数据前两个数字为n,m。n表示硬币种类数,m为最大面额,之后前n个数为每种硬币的面额,后n个数为相应每种硬币的个数。
(n<=100,m<=100000,面额<=100000,每种个数<=1000)

Output

RT

Sample Input

3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0

Sample Output

8
4

题解:
  真是,先打了一个二进制分组t了,(本来可以过的吧!)。
  正解是n×m的,首先,我们考虑设dp[i][j]表示凑出j这个数字最大还可以剩下几个i号硬币。这个可以省掉第一维.
  dp[j]=-1表示不可以凑出来,转移就是if(dp[j]>=0) dp[j]=c[i];如果用前面的硬币就可以凑出来,那么i号硬币可以一个不用,if(dp[j]>0) dp[j+v[i]]=max(dp[j+v[i]],dp[j]-1);,然后就是很简单的用一个硬币。
  初始化就是dp[0]=c[i],表示凑出0还剩下c[i]个硬币。
代码:
二进制分组TLE
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int v[],num[],w[],dp[];
int n,m,cnt=;
int main(){
while(){
scanf("%d%d",&n,&m);
if(!n&&!m) break;
memset(dp,,sizeof(dp));
dp[]=;cnt=;
for(int i=;i<=n;i++) scanf("%d",&v[i]);
for(int i=;i<=n;i++) scanf("%d",&num[i]);
for(int i=;i<=n;i++){
for(int j=;num[i]>;j*=){
int x=min(num[i],j);
num[i]-=x;
w[++cnt]=x*v[i];
}
}
for(int i=;i<=cnt;i++){
for(int j=m;j>=w[i];j--){
dp[j]|=dp[j-w[i]];
}
}
int ans=;
for(int i=;i<=m;i++) ans+=dp[i];
printf("%d\n",ans);
}
}
AC
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define MAXN 100000+1
#define RG register
using namespace std;
int dp[MAXN],v[MAXN],c[MAXN];
int n,m;
int main()
{
while(){
scanf("%d%d",&n,&m);
if(!n&&!m) break;
for(int i=;i<=n;i++) scanf("%d",&v[i]);
for(int i=;i<=n;i++) scanf("%d",&c[i]);
memset(dp,-,sizeof(dp));
dp[]=;
for(RG int i=;i<=n;i++){
for(RG int j=;j<=m;j++){
if(dp[j]>=) dp[j]=c[i];
else dp[j]=-;
}
for(RG int j=;j<=m-v[i];j++){
if(dp[j]>) dp[j+v[i]]=max(dp[j+v[i]],dp[j]-);
}
}
int ans=;
for(int i=;i<=m;i++) if(dp[i]>=) ans++;
printf("%d\n",ans);
}
return ;
}

Coins POJ - 1742的更多相关文章

  1. DP:Coins(POJ 1742)

      用硬币换钱 题目大意:就是有面值为A1,A2,A3....的硬币,各有C1,C2,C3...的数量,问在钱数为m的范围内,能换多少钱?(不找零) 这题看名字就知道是完全背包,但是这题又有点不一样, ...

  2. hdu 2844 poj 1742 Coins

    hdu 2844 poj 1742 Coins 题目相同,但是时限不同,原本上面的多重背包我初始化为0,f[0] = 1;用位或进行优化,f[i]=1表示可以兑成i,0表示不能. 在poj上运行时间正 ...

  3. Coins HDU - 2844 POJ - 1742

    Coins HDU - 2844 POJ - 1742 多重背包可行性 当做一般多重背包,二进制优化 #include<cstdio> #include<cstring> in ...

  4. 题解报告:hdu 2844 & poj 1742 Coins(多重部分和问题)

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

  5. [POJ 1742] Coins 【DP】

    题目链接:POJ - 1742 题目大意 现有 n 种不同的硬币,每种的面值为 Vi ,数量为 Ni ,问使用这些硬币共能凑出 [1,m] 范围内的多少种面值. 题目分析 使用一种 O(nm) 的 D ...

  6. poj 1742(好题,楼天城男人八题,混合背包)

    Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 33269   Accepted: 11295 Descripti ...

  7. The Fewest Coins POJ - 3260

    The Fewest Coins POJ - 3260 完全背包+多重背包.基本思路是先通过背包分开求出"付出"指定数量钱和"找"指定数量钱时用的硬币数量最小值 ...

  8. poj 1742 Coins (多重背包)

    http://poj.org/problem?id=1742 n个硬币,面值分别是A1...An,对应的数量分别是C1....Cn.用这些硬币组合起来能得到多少种面值不超过m的方案. 多重背包,不过这 ...

  9. poj 1742 Coins(dp之多重背包+多次优化)

    Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...

随机推荐

  1. yolo进化史之yolov2

    yolov1和当时最好的目标检测系统相比,有很多缺点.比如和Fast R-CNN相比,定位错误更多.和基于区域选择的目标检测方法相比,recall也比较低.yolov2的目标即在保证分类准确度的情况下 ...

  2. 英文写作report

    Writting Attached Files   Maybe you might want to get familiar about how to write the Final report. ...

  3. windows系统下安装JDK8

    学习JAVA,必须得安装一下JDK(java development kit java开发工具包),配置一下环境就可以学习JAVA了,下面是下载和安装JDK的教程: 一.下载 1.JDK下载地址: h ...

  4. Vue 前端uni-app多环境配置部署服务器的问题

    目录 前端Vue 针对问题 package.json描述 多环境部署 查看源码获取解决方案 转载请标明出处: http://dujinyang.blog.csdn.net/ 本文出自:[奥特曼超人的博 ...

  5. Fire Balls 11——平台组合,场景的美化

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  6. git之rebase、merge和cherry pick的区别(面试常问)

    git flow图例镇楼 merge 这个简单,初学者常用.比如主分支是Dev,最新版本是01.然后小明基于此,搞了个feature 分支A,业务:打酱油.然后在上面多次提交,完成功能迭代开发,如A1 ...

  7. springboot Transactional事务的使用

    直接上代码: import javax.transaction.Transactional; @Transactional(rollbackOn = { Exception.class }) publ ...

  8. 右键没有新建word选项

    两类解决办法 一. 1. 新建一个txt文本,并插入如下内容: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.doc] @=&quo ...

  9. 006:CSS高级技巧

    目录 前言 理论 CSS高级技巧 一:元素的显示与隐藏 在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow. 他们的主要目的 ...

  10. PyCharm2019激活

    PyCharm下载地址:https://www.jetbrains.com/pycharm/download/ 永久激活 这里主要介绍永久激活的方式,永久激活后,就可以放心使用了,一劳永逸,5分钟就能 ...