动态规划:HDU2844-Coins(多重背包的二进制优化)
Time Limit: 2000/1000 MS (Java/Others) Memory
Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9826 Accepted Submission(s): 3916
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.
by two zeros.
1 2 4 2 1 1
2 5
1 4 2 1
0 0
8
4
题意:有n中面值的硬币每种面值的硬币数量已知问这些硬币能组成1-m中的几种多重背包已m作为背包容量在1-m中当有物品的价值等
于背包容量时即能组成该类型。
解题心得: 1、就是一个多重背包的二进制优化问题,题目要求的是一个最后表价格可能的个数。 2、关于多重背包的二进制优化问题(多重背包的二进制优化)
#include<bits/stdc++.h>
using namespace std;
const int maxn1 = 1e5+100;
const int maxn2 = 110;
int n,m;
bool dp[maxn1];
struct Coin
{
int num;
int va;
} c[maxn2]; int pre_coin()
{
int sum = 0;
for(int i=1; i<=n; i++)
scanf("%d",&c[i].va);
for(int i=1; i<=n; i++)
{
scanf("%d",&c[i].num);
sum += c[i].num * c[i].va;
}
}
int main()
{
while(scanf("%d%d",&n,&m) && n+m)
{
memset(dp,0,sizeof(dp));
dp[0] = true;
pre_coin();
for(int i=1; i<=n; i++)
{
int cnt = 0;
for(int k=1; k<=c[i].num; k*=2)//k*=2二进制优化
{
cnt = k*c[i].va;
for(int j=m; j>=cnt; j--)
if(dp[j-cnt])
dp[j] = true;
c[i].num -= k;
} if(cnt)
{
cnt = c[i].num * c[i].va;
for(int j=m; j>=cnt; j--)
{
if(dp[j-cnt])
dp[j] = true;
}
}
} int Sum = 0;//记录可能是手表价格的个数
for(int i=m; i>=1; i--)
if(dp[i])
Sum ++;
printf("%d\n",Sum);
}
}
动态规划:HDU2844-Coins(多重背包的二进制优化)的更多相关文章
- HDU-2844 Coins 多重背包 物品数量二进制优化
题目链接:https://cn.vjudge.net/problem/HDU-2844 题意 给你一些不同价值和一定数量n的硬币. 求用这些硬币可以组合成价值在[1 , m]之间的有多少. 思路 多重 ...
- HDU 1059(多重背包加二进制优化)
http://acm.hdu.edu.cn/showproblem.php?pid=1059 Dividing Time Limit: 2000/1000 MS (Java/Others) Me ...
- hdu2844 Coins -----多重背包+二进制优化
题目意思:给出你n种硬币的面额和数量,询问它能够组合成1~m元中的几种情况. 这题如果直接按照完全背包来写的话,会因为每一种硬币的数目1 ≤ Ci ≤ 1000而超时,所以这里需要运用二进制优化来解决 ...
- luogu||P1776||宝物筛选||多重背包||dp||二进制优化
题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物.看来小FF只能含泪 ...
- CodeForces922E DP//多重背包的二进制优化
https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法 ...
- 动态规划:HDU1059-Dividing(多重背包问题的二进制优化)
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- dp之多重背包(二进制优化)
void solve(int v,int w,int c){ int count=0; for(int k=1;k<=c;k<<=1) { val[c ...
- POJ 1276 Cash Machine(多重背包的二进制优化)
题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了… ...
- HDU-2844 Coins(多重背包)
Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...
随机推荐
- Cause: java.sql.SQLException: 无法转换为内部表示(Mybatis)
公司开发档案系统使用框架:Spring+Struts2+Mybatis+EasyUI,在开发过程中出现sql异常:“Cause: java.sql.SQLException: 无法转换为内部表示”,错 ...
- Java基础重点指南
Java基础重点指南 每个人都有自己的学习方法,下面是我学完Java后总结的一些要点: 一:(了解)Java诞生于1995年,由Sun公司开发.它把源代码编译成“中间码”,然后通过“Java虚拟机”把 ...
- Android使用文件管理器打开指定文件夹,浏览里面的内容
Android下可以打开一些文件,带有.doc 等后缀的文件网上一般都有解释,这个写一个使用文件管理器打开指定文件夹的 private void openAssignFolder(String pat ...
- mysql数据库字段类型的选择原则
原文链接:http://blog.csdn.net/u013412790/article/details/51615407 数据库类型的选择对数据库的性能影响很大 1 . 数据类型会影响存储空间的开销 ...
- FreeMarker基本语法的使用
参考博客: http://www.cnblogs.com/panchanggui/p/9346574.html https://blog.csdn.net/zyy88886666/article/de ...
- nginx对不存在的文件进行404处理
location / { try_files $uri $uri/ /?$args 404; } location / { try_files $uri $uri/ /index.html 404; ...
- Element-ui多选下拉实现全部与其他互斥
1.以事件类型为例,给下拉绑定选项改变的change事件 2.当已选项个数大于1(即先选了其他,再选不限)且最后选的是不限时,取消其他选项选中状态: 当已选项个数等于2(即先选了不限,再选其他)且第一 ...
- c++ STL stack容器成员函数
这是后进先出的栈,成员函数比较简单,因为只能操作栈顶的元素.不提供清除什么的函数. 函数 描述 bool s.empty() 栈是否为空(即size=0).若空,返回true,否则,false. vo ...
- ABAP和Hybris的源代码生成工具
ABAP 有两种方式,一种是ABAP Code Composer, 细节可以查看我的博客Step by Step to generate ABAP code automatically using C ...
- 新建framework的bundle资源 linker command failed with exit code 1解決
enable bitcode 设为no