HDU 2844 Coin 多重背包
Coins
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6279 Accepted Submission(s): 2561
use coins.They have coins of value A1,A2,A3...An Silverland dollar. One
day Hibix opened purse and found there were some coins. He decided to
buy a very nice watch in a nearby shop. He wanted to pay the exact
price(without change) and he known the price would not more than m.But
he didn't know the exact price of the watch.
You are to write a
program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to
the number of Tony's coins of value A1,A2,A3...An then calculate how
many prices(form 1 to m) Tony can pay use these coins.
input contains several test cases. The first line of each test case
contains two integers n(1 ≤ n ≤ 100),m(m ≤ 100000).The second line
contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1 ≤ Ai ≤
100000,1 ≤ Ci ≤ 1000). The last test case is followed by two zeros.
#include<stdio.h>
#include<string.h>
#include<algorithm>
int v[];
int w[];
int dp[];
using namespace std;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==&&m==)
break;
memset(v,,sizeof(v));
memset(w,,sizeof(w));
for(int i=;i<=;i++)
dp[i]=-;
dp[]=;
for(int i=; i<=n; i++)
scanf("%d",&v[i]);
for(int i=; i<=n; i++)
scanf("%d",&w[i]);
for(int i=; i<=n; i++)
{
if(v[i]*w[i]>=m)//完全背包
{
for(int j=v[i]; j<=m; j++)
{
dp[j]=max(dp[j],dp[j-v[i]]+v[i]);
}
}
else
{
for(int k=; k<=w[i]; k=k*)
{
for(int j=m; j>=v[i]*k; j--)
{
dp[j]=max(dp[j],dp[j-v[i]*k]+v[i]*k);
}
w[i]-=k;
}
if(w[i]>)
{
for(int j=m; j>=v[i]*w[i]; j--)
dp[j]=max(dp[j],dp[j-v[i]*w[i]]+v[i]*w[i]);
}
}
}
int count=;
for(int i=; i<=m; i++)
{
if(dp[i]>=)
count++;
}
printf("%d\n",count);
}
return ;
}
AC代码二:
#include<iostream>
#include<string.h>
using namespace std; int a[],c[],F[]; void inline ZeroOnePack(int ResVal,int ResVol,int BpCap)
{
for(int i=BpCap;i>=ResVol;--i)
{
F[i]=max(F[i],F[i-ResVol]+ResVal);
}
} void inline CompletePack(int ResVal,int ResVol,int BpCap)
{
for(int i=ResVol;i<=BpCap;++i)
{
F[i]=max(F[i],F[i-ResVol]+ResVal);
}
} void MultiplePack(int ResVal,int ResVol,int ResNum,int BpCap)
{
if(ResVol*ResNum>=BpCap)
{ CompletePack(ResVal,ResVol,BpCap); }
for(int i=;(<<i)<=ResNum;++i)
{
ZeroOnePack((ResVal<<i),(ResVol<<i),BpCap);
ResNum-=(<<i);
}
if(ResNum) { ZeroOnePack(ResVal*ResNum,ResVol*ResNum,BpCap); }
} int main()
{
int i,j,n,m;
while(cin>>n>>m)
{
if(n+m==)
break;
memset(F,,sizeof(F));
for(i=;i<n;i++)
cin>>a[i];
for(j=;j<n;j++)
cin>>c[j];
for(i=;i<n;i++)
{
MultiplePack(a[i],a[i],c[i],m) ;
}
int num=;
for(i=;i<=m;i++)
{
if(F[i]==i)
num++;
}
cout<<num<<endl;
}
return ;
}
HDU 2844 Coin 多重背包的更多相关文章
- hdu 2844 Coins (多重背包+二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...
- HDu -2844 Coins多重背包
这道题是典型的多重背包的题目,也是最基础的多重背包的题目 题目大意:给定n和m, 其中n为有多少中钱币, m为背包的容量,让你求出在1 - m 之间有多少种价钱的组合,由于这道题价值和重量相等,所以就 ...
- HDU - 2844 Coins(多重背包+完全背包)
题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...
- HDU 2844 Coins (多重背包计数 空间换时间)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 2844 coins(多重背包 二进制拆分法)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
- hdu 2844 Coins 多重背包(模板) *
Coins Time Limit: 2000/1 ...
- hdu 1963 Investment 多重背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1963 //多重背包 #include <cstdio> #include <cstr ...
- 杭电1171 Big Event in HDU(母函数+多重背包解法)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu2844 & poj1742 Coin ---多重背包--两种方法
意甲冠军:你有N种硬币,每个价格值A[i],每个号码C[i],要求. 在不超过M如果是,我们用这些硬币,有多少种付款的情况下,.那是,:1,2,3,4,5,....,M这么多的情况下,,你可以用你的硬 ...
随机推荐
- Robot Framework 安装及环境配置
Robot Framework 安装及环境配置 Robot Framework 介绍 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以 ...
- Maven配置浅析
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- iOS:视图切换的第一种方式:模态窗口
一.UIModalController:模态窗口(一个控制器模态出另一个控制器的模态窗口) 当我们在view controller A中模态显示view controller B的时候,A就充当pre ...
- 数学图形(2.20)3D曲线
这一节主要是发布我自己写的3D曲线, (1)立体flower线圈 vertices = a = 10.1 b = 3.1 s = (a + b) / b o = i = to (**PI) j = m ...
- QT 异步函数转为同步函数的方法
在QT中,一般推荐使用异步函数.除了异步函数的非阻塞特性外,QT的Signal/Slot特性在异步函数中可以得到充分的发挥.因此,在QT中,很多API的设计都是使用非阻塞的异步函数作为API,然后执行 ...
- 倾斜摄影三维建模软件photoscan教程 [转]
PhotoScan是一款基于影响自动生成高质量三维模型的优秀软件,这对于3D建模需求来说实在是一把利器. PhotoScan无需设置初始值,无须相机检校,它根据最新的多视图三维重建技术,可对任意照片进 ...
- 根据不同浏览器使用不同的css文件
代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- [转发] git设置代理
一. 写的很好推荐,(http与ssh设置都有) https://imciel.com/2016/06/28/git-proxy/ 二. 只有 http的方式代码设置 http://stackover ...
- java的21个技术点归纳学习