poj 1742 多重背包
题意:给出n种面值的硬币, 和这些硬币每一种的数量, 要求求出能组成的钱数(小于等于m)
思路:一开始直接用多重背包套上去超时了,然后就没辙了,然后参考网上的,说只需要判断是否能取到就行了,并不需要记录其价格,直接用bool判断是否能取到。就不会TLE了。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n,m;
int v,sum;
int a[200],b[200];
bool dp[100010]; /*完全背包*/
void CompletePack(int cost,int weight)
{
for(int i=cost;i<=v;i++)
{
dp[i]|=dp[i-cost];
}
return;
}
/*01背包*/
void ZeroOnePack(int cost,int weight)
{
for(int i=v;i>=cost;i--)
{
dp[i]|=dp[i-cost];
}
return;
} /*多重背包*/
void MultiplePack(int cost,int weight,int amount)
{
if(cost*amount>=v)
{
CompletePack(cost,weight);
return;
}
/*二进制优化*/
int k=1;
while(k<amount)
{
ZeroOnePack(k*cost,k*weight); amount-=k;
k*=2;
}
ZeroOnePack(amount*cost,amount*weight); return;
} int main(int i)
{
while(scanf("%d%d",&n,&m)!=EOF,n+m)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
v=m;
for(int i=0;i<=m;i++)
dp[i]=0;
dp[0]=1;
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
MultiplePack(a[i],a[i],b[i]);
}
int ans=0;
for(int i=1;i<=m;i++)
{
if(dp[i])
ans++;
}
printf("%d\n",ans);
}
return 0;
}
poj 1742 多重背包的更多相关文章
- poj 2392 多重背包
题意:有几个砖,给出高度,能放的最大高度和数目,求这些砖能垒成的最大高度 依据lim排个序,按一层一层进行背包 #include<cstdio> #include<iostream& ...
- poj 1276 多重背包
735 3 4 125 6 5 3 350 //735的最大额,3种,4个125,6个5,3个350 633 4 500 30 6 100 1 5 0 1 735 0 0 3 10 100 10 50 ...
- POJ 3260 多重背包+完全背包
前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...
- poj 1014多重背包
题意:给出价值为1,2,3,4,5,6的6种物品数量,问是否能将物品分成两份,使两份的总价值相等. 思路:求出总价值除二,做多重背包,需要二进制优化. 代码: #include<iostream ...
- Dividing POJ - 1014 多重背包二进制优化
多重背包模型 写的时候漏了一个等号找了半天 i<<=1 !!!!!! #include<iostream> #include<cstdio> #include&l ...
- Cash Machine POJ - 1276 多重背包二进制优化
题意:多重背包模型 n种物品 每个m个 问背包容量下最多拿多少 这里要用二进制优化不然会超时 #include<iostream> #include<cstdio> #in ...
- poj 1742 多重背包问题 dp算法
题意:硬币分别有 A1.....An种,每种各有C1......Cn个,问组成小于m的有多少种 思路:多重背包问题 dp[i][j]表示用前i种硬币组成j最多剩下多少个 dp=-1的表示凑不齐 dp ...
- POJ 1276 (多重背包) Cash Machine
题意: 有n种纸币,已知每种纸币的面值和数量,求所能凑成的不超过cash的最大总面值. 分析: 这道题自己写了一下TLE了,好可耻.. 找了份比较简洁的代码抄过来了..poj1276 #include ...
- Cash Machine POJ 1276 多重背包
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 35387 Accepted: 12816 Description A B ...
随机推荐
- JBOSS安装配置详细教程
首先在http://jbossas.jboss.org/downloads/下载相关程序我下载的是 JBoss AS 6.1.0.Final 1.配置jboss环境 1.1用户变量path后面添加 ; ...
- swift 获取文件大小
//获取文件大小 func getSize(url: URL)->UInt64 { var fileSize : UInt64 = 0 do { let attr = try FileManag ...
- 【新发现】不用苹果开发账号就能申请ios证书真机调试
虽然xcode现在可以免证书进行测试了,但众多跨平台开发者,如果还没注册苹果开发者账号. 想安装到自己非越狱手机测试是无能为力了. 不过新技术来了,只需要普通免费的苹果账号无需付费成为开发者就可以申请 ...
- TP3.2二级导航与高亮显示
闲来无事,记记笔记 二级导航的实现,就是一个二级联动,嗯 先来看看数据库,我喜欢用一个表,表多了就不好玩了 二级代号取一级导航的代号就行了,做个简单的栗子: 代码部分: 看控制器,大头在这: < ...
- centos7下nginx安装
http://www.linuxidc.com/Linux/2016-09/134907.htm 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Window ...
- jsp隐藏关键 敏感信息,只显示前后字段
今天写jsp页面,要求对字段中间部分隐藏,只显示前几位和后几位.搜了一下发现网上大都是隐藏前面指定字段,或者是利用正则表达式隐藏手机号或是身份证.这样的话必须预先知道字段长度,而我不想知道长度只显示前 ...
- angular学习(二)-- Directive
1.2 指令:Directive AngularJS 通过被称为 指令 的新属性来扩展 HTML, 具体表现形式一般为带有前缀 ng-xxx 的 HTML 属性. 指令的使用形式 ng-xxx 的属性 ...
- Orleans---持久化
Orleans配置---持久化 这是Orleans系列文章中的一篇.首篇文章在此 Grain理想的生命周期应该如下图所示: 这就如美国电影中的大反派一样,死了再复活,死了再复活.当然如果复活的反派没有 ...
- 新入门的小白,整理一下特别简单实用的div+css兼容性的问题。
最近整理了一下特别简单的div+css的不同浏览器的兼容性的问题,跟大家分享一下,只适合刚入门的新手,欢迎大牛们给提出意见. 1. 默认的内外边距不同 问题: 各个浏览器默认的内外边距不同 解决: * ...
- iOS app 的 ASLR
这两天逆向一个程序,发现每次image list -o -f 之后,它的基地址都是0x00000,也就是偏移地址是0. 想到这个应该是载入内存时有没有启用偏移有关,于是找了下答案:aslr 百度百科 ...