转载地址:http://m.blog.csdn.net/blog/u010489766/9229011

题目链接:http://poj.org/problem?id=1276

题意:机器里面共有n种面额的钱币,每种各ni张,求机器吐出小于等于所要求钱币的最大值
解析1:这题大牛都用了多重背包,不过,我一同学想出了一种就这题而言特别简单有效的方 法。(话说我就认为这题本来就不需要用到背包的,因为n的范围只到10,太小了)。方法就是对钱进行遍历,看这些钱一共能组成多少面额的钱,然后从 cash向下枚举就行了。因为最多只有10*100000一百万的数据量而已。
 
//算法就是枚举,看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 【凑钱数的问题】【枚举思路 或者 多重背包解决】的更多相关文章

  1. POJ 1276 Cash Machine(多重背包的二进制优化)

    题目网址:http://poj.org/problem?id=1276 思路: 很明显是多重背包,把总金额看作是背包的容量. 刚开始是想把单个金额当做一个物品,用三层循环来 转换成01背包来做.T了… ...

  2. Poj 1276 Cash Machine 多重背包

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26172   Accepted: 9238 Des ...

  3. poj 1276 Cash Machine(多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33444   Accepted: 12106 De ...

  4. POJ 1276 Cash Machine

    Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24213 Accepted: 8476 Descrip ...

  5. POJ 1276 Cash Machine(单调队列优化多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38986   Accepted: 14186 De ...

  6. POJ 1276 Cash Machine 【DP】

    多重背包的模型,但一开始直接将N个物品一个一个拆,拆成01背包竟然T了!!好吧OI过后多久没看过背包问题了,翻出背包九讲看下才发现还有二进制优化一说........就是将n个物品拆成系数:1,2,4, ...

  7. POJ 1276 Cash Machine -- 动态规划(背包问题)

    题目地址:http://poj.org/problem?id=1276 Description A Bank plans to install a machine for cash withdrawa ...

  8. [poj 1276] Cash Machine 多重背包及优化

    Description A Bank plans to install a machine for cash withdrawal. The machine is able to deliver ap ...

  9. POJ 1276 Cash Machine(完全背包模板题)

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44409   Accepted: 16184 Description A B ...

随机推荐

  1. ASP.NET动态网站制作(25)-- ADO.NET(4)

    前言:这节课老师主要讲网页当中内容的分页效果,自己写一个分页控件. 内容: 1.首先写出HTML代码: <div id="pager"> <%=GetPagerH ...

  2. Laravel5.1 路由 -路由分组

    路由分组有啥好处? 有时候啊 一大堆路由它们都有共同的地方,比如都使用一个中间件(过两天写)或是前缀都一样,避免代码重复 我们可以将他们分到一组中. 1 路由分组可以共享哪些属性? 中间件 middl ...

  3. UIAlertView及UIActionSheet 在ios8极其以下版本的兼容问题解决方案

    本文转载至 http://www.aichengxu.com/view/35326 UIAlertView及UIActionSheet在ios8中被放弃,其功能将完全由UIAlertControlle ...

  4. 1714 B君的游戏(Nim博弈)

    1714 B君的游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 B君和L君要玩一个游戏.刚开始有n个正整数  ai  . 双方轮流操作.每次操作,选一个正整数 ...

  5. knockoutJs在移动设备上有时无法更新控件值

    最近在用cordova(phonegap)写一个移动app,表单比较复杂,用了knockoutJs作为前端的MVVM框架进行数据绑定. 但是发现有时候(其实是每次)如果最后在input中编辑一个值,然 ...

  6. angularjs 复选框 单选框

    关于复选框,在做项目的时候,有一下几点心得 单选框 1.判断哪个单选框选中的情况 html代码 判断该复选框是否选中 $scope.agree.isChecked     判断这个值,如果等于1,代表 ...

  7. ECMAScript/JS 基础知识讲解

    闭包 下面这个方法能输入0 1 2 ... 9吗?显然是不可以的,输出结果是10个10. function test() { var arr = []; for(var i = 0; i < 1 ...

  8. 封装AJax实现JSON前台与后台交互

    实践技术点:1.AJax自定义封装 2.后台序列化与反序列化JSON 3.客户端解析JSON字符串,处理DOM 实现代码如下: 1.JS脚本代码:   1 /*** NOTE:AJAX处理JS TIM ...

  9. 0x08 MySQL 超详细-索引原理&慢查询优化【转-多图】(重点)

    Content From——Egon's Blog http://www.cnblogs.com/linhaifeng/articles/7274563.html#top 0x01 介绍 为何要有索引 ...

  10. 斯坦福大学Andrew Ng - 机器学习笔记(5) -- 支持向量机(SVM)

    大概用了一个月,Andrew Ng老师的机器学习视频断断续续看完了,以下是个人学习笔记,入门级别,权当总结.笔记难免有遗漏和误解,欢迎讨论. 鸣谢:中国海洋大学黄海广博士提供课程视频和个人笔记,在此深 ...