HDU-2844 Coins 多重背包 物品数量二进制优化
题目链接:https://cn.vjudge.net/problem/HDU-2844
题意
给你一些不同价值和一定数量n的硬币。
求用这些硬币可以组合成价值在[1 , m]之间的有多少。
思路
多重背包问题,看了一眼数据范围,用二进制优化一下物品数量即可。
提交过程
AC |
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=100+20, maxm=1e5;
int num[maxn], cost[maxn], val[maxn];
int dp[maxm];
int n, m;
void zeroKnap(int cost, int val){
for (int i=m; i>=cost; i--)
dp[i]=max(dp[i], dp[i-cost]+val);
}
void compKnap(int cost, int val){
for (int i=cost; i<=m; i++)
dp[i]=max(dp[i], dp[i-cost]+val);
}
int main(void){
while (scanf("%d%d", &n, &m)==2 && n+m){
for (int i=1; i<=n; i++) scanf("%d", &cost[i]);
for (int i=1; i<=n; i++) scanf("%d", &num[i]);
memset(dp, 0, sizeof(dp));
for (int i=1; i<=n; i++){
if (num[i]*cost[i]>=m)
compKnap(cost[i], cost[i]);
else{
for (int k=1; k<num[i]; k*=2){
zeroKnap(cost[i]*k, cost[i]*k);
num[i]-=k;
}
zeroKnap(cost[i]*num[i], cost[i]*num[i]);
}
}
int ans=0;
for (int i=1; i<=m; i++)
if (dp[i]==i) ans++;
printf("%d\n", ans);
}
return 0;
}
Time | Memory | Length | Lang | Submitted |
---|---|---|---|---|
234ms | 1596kB | 1108 | G++ | 2018-08-21 05:13:40 |
HDU-2844 Coins 多重背包 物品数量二进制优化的更多相关文章
- HDU 1059(多重背包加二进制优化)
http://acm.hdu.edu.cn/showproblem.php?pid=1059 Dividing Time Limit: 2000/1000 MS (Java/Others) Me ...
- hdu 2844 Coins (多重背包+二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2844 思路:多重背包 , dp[i] ,容量为i的背包最多能凑到多少容量,如果dp[i] = i,那么代表 ...
- hdu 2844 coins(多重背包 二进制拆分法)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
- 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/1 ...
- HDU 2844 Coins (多重背包计数 空间换时间)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 动态规划:HDU2844-Coins(多重背包的二进制优化)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- dp之多重背包(二进制优化)
void solve(int v,int w,int c){ int count=0; for(int k=1;k<=c;k<<=1) { val[c ...
随机推荐
- 使用Ansible安装部署nginx+php+mysql之配置iptables防火墙(0)
前提: 1.已配置好hosts文件且免密码登录 2.需要的yaml文件已上传到主控端 一.使用Ansible配置iptables 1.iptables.yaml文件 --- - hosts: clon ...
- CF369E. ZS and The Birthday Paradox
/* cf369E. ZS and The Birthday Paradox http://codeforces.com/contest/711/problem/E 抽屉原理+快速幂+逆元+勒让德定理 ...
- Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟
https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...
- static final常量变量的正确书写规范
AccountConstants.java类 命名:常量类以Constants单词命名结尾 package com.paic.pacz.core.salesmanage.util; import ja ...
- 关于Windows通过远程桌面訪问Ubuntu
关于Windows通过远程桌面訪问Ubuntu 问题及目标 Window环境通过远程桌面訪问Ubuntu Ubuntu机器端 1. 安装所需软件包 sudoapt-get install xrdp ...
- android创建桌面快捷键shortcut
有非常多人也写过创建桌面快捷键的blog.可是大部分都仅仅讲了怎么用,事实上技术使用起来都非常easy.可是你使用后下次还知道吗? 根本原因还是不清楚原理.今天我就来讲讲shortcut创建过程. 过 ...
- Registry Connect failed,Windows服务诊断
Message:Connection failed for 192.168.32.38_e-futrueserer. Details:Windows Registry Datasource: Regi ...
- java应用集锦9:httpclient4.2.2的几个常用方法,登录之后访问页面问题,下载文件
转账注明出处:http://renjie120.iteye.com/blog/1727933 在工作中要用到android,然后进行网络请求的时候,打算使用httpClient. 总结一下httpCl ...
- WebService CXF学习:复杂对象传递(List,Map)
转自:https://blog.csdn.net/z69183787/article/details/35988335 第一步:创建存储复杂对象的类(因为WebServices的复杂对象的传递,一定要 ...
- Linux就该这么学 20181011(第十五章邮件)
参考链接:https://www.linuxprobe.com. https://www.linuxprobe.com/chapter-15.html 电子邮箱系统 foxmail MUA 发送 MT ...