【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】
转载地址:http://m.blog.csdn.net/blog/u010489766/9229011
题目链接:http://poj.org/problem?id=1276
//算法就是枚举,看0~cash的钱是不是都能到,到了是1,否则为0
#include<stdio.h>
#include<string.h> int cash,N,n[20],d[20],dp[100100];
int main()
{
while(scanf("%d",&cash) != EOF)
{
memset(n,0,sizeof(n));
memset(d,0,sizeof(d));
memset(dp,0,sizeof(dp));
int count = 0;
dp[0] = 1;
scanf("%d",&N);
for(int i = 1; i <= N ; i++)
scanf("%d%d",&n[i],&d[i]);
for(int i = 1; i <= N ; i++)
{
for(int k = cash; k >= 0 ; k--)//N的范围较小,所以直接枚举
{
if(dp[k] == 1)
{
for(int j = 1; j <= n[i] ; j ++)
{
if(k+j*d[i] <= cash)//不加的话可能会超出数组的范围
dp[k+j*d[i]] = 1;//此处可以直接等于1,因为更新k以上的,k以下的还是上一次的1
}
}
}
} for(int i = cash; i >= 0 ; i --)
if(dp[i] == 1)
{
printf("%d\n",i);
break;
}
}
return 0;
}
解析2:多重背包,把每种钱的张数按照二进制分开,例如13分为1,2,4,6,(之所以按照二进制是因为这么分的话,小于13任何数都可由1,2,4,6组合而成),然后按照01背包搞定。
#include<stdio.h>
#include<string.h> int cash,n,v[10100],dp[101000];//数组要开的足够大
int main()
{
while(scanf("%d",&cash) != EOF)
{
memset(dp,0,sizeof(dp));
memset(v,0,sizeof(v));
scanf("%d",&n);
int cnt = 0;
for(int i = 1; i <= n ; i ++)
{
int a,b,t = 1;
scanf("%d%d",&b,&a);
if(b != 0)
{
while(t < b)//此处是把b按照二进制分开
{
b = b - t;
v[cnt++] = a * t;
t *= 2;
}
v[cnt++] = b*a;
}
}
if(n == 0 || cash == 0)
{
printf("0\n");
continue;
} dp[0] = 1;
for(int i = 0 ; i < cnt ; i ++)
for(int j = cash ; j >= v[i] ; j --)
dp[j-v[i]] == 1?dp[j] = 1:0; for(int i = cash; i >= 0;i--)
{
if(dp[i] == 1)
{
printf("%d\n",i);
break;
}
}
}
return 0;
}
【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】的更多相关文章
- POJ 1276 Cash Machine(多重背包的二进制优化)
题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了… ...
- Poj 1276 Cash Machine 多重背包
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26172 Accepted: 9238 Des ...
- poj 1276 Cash Machine(多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33444 Accepted: 12106 De ...
- POJ 1276 Cash Machine
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24213 Accepted: 8476 Descrip ...
- POJ 1276 Cash Machine(单调队列优化多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38986 Accepted: 14186 De ...
- POJ 1276 Cash Machine 【DP】
多重背包的模型,但一开始直接将N个物品一个一个拆,拆成01背包竟然T了!!好吧OI过后多久没看过背包问题了,翻出背包九讲看下才发现还有二进制优化一说........就是将n个物品拆成系数:1,2,4, ...
- POJ 1276 Cash Machine -- 动态规划(背包问题)
题目地址:http://poj.org/problem?id=1276 Description A Bank plans to install a machine for cash withdrawa ...
- [poj 1276] Cash Machine 多重背包及优化
Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...
- POJ 1276 Cash Machine(完全背包模板题)
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44409 Accepted: 16184 Description A B ...
随机推荐
- lucene中的IndexWriter.setMaxFieldLength()
lucene中的IndexWriter.setMaxFieldLength() 老版本的Lucene中,IndexWriter的maxFieldLength是指一个索引中的最大的Field个数. 这个 ...
- mysql with python
前言: 数据库为人类解决了三大问题:持久化存储.优化读写.数据标准化. MySQL它不是数据库,它是管理数据库的软件.MySQL管理了很多数据库.是典型的服务型数据库,需要TCP/IP去连接. MyS ...
- 【BZOJ1977】[BeiJing2010组队]次小生成树 Tree 最小生成树+倍增
[BZOJ1977][BeiJing2010组队]次小生成树 Tree Description 小 C 最近学了很多最小生成树的算法,Prim 算法.Kurskal 算法.消圈算法等等. 正当小 C ...
- 《从零开始学Swift》学习笔记(Day 14)——字符串的插入、删除和替换
原创文章,欢迎转载.转载请注明:关东升的博客 对应可变字符串可以插入.删除和替换,String提供了几个方法可以帮助实现这些操作.这些方法如下: splice(_:atIndex:).在索引位置插入字 ...
- IDEA中的lombok插件安装以及各注解的详细介绍
IDEA中的lombok插件安装以及各注解的详细介绍 其实对于我们来说, 写好实体类后,直接用快捷方式生成get,set方法,还有 构造方法就行了,但是对于字段比较多的, 如果修改一个属性的话,就要再 ...
- <2013 12 17> 专业技能
Specialties: • Mechanical design modeling using Pro/ENGINEER and SolidWorks.• Robot control, path pl ...
- javascript之冒泡排序
Array.prototype.bubble = function () { var temp; //第1轮比较求第一,第二轮求第二,以此类推(i<=数组成员的个数); for (var i = ...
- javascript实例:两种方式实现tab栏选项卡
方法1: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- element-ui tree组件 return span 标签报错
原因: webpack无法解析vue-jsx的语法问题 解决方案 (1).安装依赖 [babel-plugin-transform-vue-jsx][1] npm install\ babel-plu ...
- key points & (QA) about RPKI
@1: Q: What does ROA look like?Since ROA means which ASes are allowed for originating routes to some ...