Cash Machine--(背包,二进制优化)

DB(一):数据库概述、SQL概述、Oracle数据类型 包括Oracle、DB2、SQL Server、MySQL数据库概述;数据定义语言DDL、数据操作语言DML、事务控制语言TCL、数据查询语言DQL、数据控制语言DCL语言介绍;NUMBER 、CHAR、VARCHAR2、DATE数据库类型;CHAR和VARCHAR2的存储编码、CHAR和VARCHAR2的最大长度、LONG和CLOB类型。 阅读详情

题目:

A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill denominations, say Dk, k=1,N, and for each denomination Dk the machine has a supply of nk bills. For example, 

N=3, n1=10, D1=100, n2=4, D2=50, n3=5, D3=10 

means the machine has a supply of 10 bills of @100 each, 4 bills of @50 each, and 5 bills of @10 each. 

Call cash the requested amount of cash the machine should deliver and write a program that computes the maximum amount of cash less than or equal to cash that can be effectively delivered according to the available bill supply of the machine. 

Notes: 
@ is the symbol of the currency delivered by the machine. For instance, @ may stand for dollar, euro, pound etc. 

Input

The program input is from standard input. Each data set in the input stands for a particular transaction and has the format: 

cash N n1 D1 n2 D2 ... nN DN 

where 0 <= cash <= 100000 is the amount of cash requested, 0 <=N <= 10 is the number of bill denominations and 0 <= nk <= 1000 is the number of available bills for the Dk denomination, 1 <= Dk <= 1000, k=1,N. White spaces can occur freely between the numbers in the input. The input data are correct. 

Output

For each set of data the program prints the result to the standard output on a separate line as shown in the examples below. 

Sample Input

735 3  4 125  6 5  3 350
633 4  500 30  6 100  1 5  0 1
735 0
0 3  10 100  10 50  10 10

Sample Output

735
630
0
0

Hint

The first data set designates a transaction where the amount of cash requested is @735. The machine contains 3 bill denominations: 4 bills of @125, 6 bills of @5, and 3 bills of @350. The machine can deliver the exact amount of requested cash. 

In the second case the bill supply of the machine does not fit the exact amount of cash requested. The maximum cash that can be delivered is @630. Notice that there can be several possibilities to combine the bills in the machine for matching the delivered cash. 

In the third case the machine is empty and no cash is delivered. In the fourth case the amount of cash requested is @0 and, therefore, the machine delivers no cash.

 

题意:

已知金额cash,给定几种不同面值的货币的数量及面值,

求利用给定的货币可以凑成小于等于cash的金额的最大值

 

思路:直接用多重背包会超时,需要用到二进制的优化,具体看代码

 

超时代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[100861],b[100861],dp[100861];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(dp,0,sizeof(dp));
        int m;
        scanf("%d",&m);
        for(int i=0;i<m;i++)
            scanf("%d%d",&a[i],&b[i]);
        for(int i=0;i<m;i++)
        {
            for(int j=n;j>=0;j--)
            {
                for(int k=0;k<=a[i];k++)
                {
                    if(j-k*b[i]<0)
                        break;
                    dp[j]=max(dp[j],dp[j-k*b[i]]+k*b[i]);
                }
            }
        }
        printf("%d\n",dp[n]);
    }
    return 0;
}

 

 

ac代码:

 

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int val[100861],dp[100861];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int k=0;
        memset(dp,0,sizeof(dp));
        int m;
        scanf("%d",&m);
        int a,b;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&a,&b);
            for(int j=1;j<=a;j=j*2)
            {
                val[k++]=j*b;
                a=a-j;
            }
            if(a>0)
                val[k++]=a*b;
        }
        for(int i=0;i<k;i++)
        {
            for(int j=n;j>=val[i];j--)
            {
                dp[j]=max(dp[j],dp[j-val[i]]+val[i]);
            }
        }
        printf("%d\n",dp[n]);
    }
    return 0;
}

 

POJ1276 Cash Machine详解(多重背包与二进制优化) 我的第二篇题解hhh 虽然网上可以搜到的该题的题解并不少,而且都能确定出是“多重背包”的解法。但是对于“背包”和“物品”的描述,我感觉交待的并不是很清楚,至少对于像我这样的初学者来说,是不容易理解的。 这篇博客可以帮助你更好的理解这个题目,但是你必须有多重背包的基础。 ———————————————————————————————————— 原题 POJ1276 Cash Machine 题意 有... 阅读详情

相关推荐

在Kintex-7 FPGA上实现皮秒级时间测量:手把手教你搭建CARRY4进位链TDC(附源码与约束)

本文详细介绍了在Kintex-7 FPGA上利用CARRY4进位链实现皮秒级时间测量(TDC)的完整方案。从CARRY4的物理特性分析到硬件架构设计,再到校准方法与精度提升技巧,手把手教你构建测量精度达53ps的TDC系统,并附源码与约束文件,助力激光雷达、高能物理等精密计时应用开发。

weixin_42550052的博客 444

poj1276

Cash Machine Time Limit:1000MS Memory Limit:10000K Total Submissions:15684 Accepted:5369 Description A Bank plans to install a machine for cash withdrawal. ...

weixin_34174105的博客 296

【全开源】旅行吧旅游门票预订系统源码(FastAdmin+ThinkPHP+Uniapp)

此外,系统还会根据我的旅行计划和喜好,为我推荐合适的景点和门票,让我的旅行更加丰富多彩。旅游门票预订系统的出现,不仅简化了门票预订的流程,还提高了旅行的便捷性和效率。一款基于FastAdmin+ThinkPHP+Uniapp开发的旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统,提供前后台无加密源码,支持私有化部署。如今,有了旅游门票预订系统,这些问题都能迎刃而解。智能推荐:系统还会根据你的旅行计划和喜好,为你推荐合适的景点和门票,让你的旅行更加丰富多彩。

2401_84413757的博客 1301

cx_Oracle和oracledb的爱恨情仇

实习生:我要用python访问oracle,我究竟该用哪个库啊,网上搜的有两个,一个是cx_Oracle另一个是oracledb,这两个有什么区别?我:话说那是2022年5月一个阴云密布的日子,甲骨文发布了python oracledb驱动程序。与早期的cx_Oracle驱动程序(创建于1999年)一样,该模块允许Python应用程序连接到Oracle数据库,执行SQL和PL/SQL语句,并执行SODA操作。这两个驱动程序都实现了Python数据库API规范2.0版,有很多扩展,只有一些必要的遗漏。

SunnyRivers 2587

新手避坑指南:从GEO数据库下载单细胞测序数据的5个关键步骤(附实操截图)

本文为单细胞测序数据下载新手提供5个关键避坑步骤,涵盖数据搜索准备、样本量评估、文件选择决策、元数据诊断及高效下载技术。通过实操截图和代码示例,帮助研究者快速锁定GEO数据库中的优质单细胞测序数据,避免常见错误。

weixin_30296405的博客 664

arcgis建筑数据的矢量化(一)

简单来说,建筑数据的获取无外乎是矢量化和去网站下载 无奈的是,osm和网上的建筑数据只有全国的主要城市,实在是为难我们这些小城市的,百度和天地图上是有建筑数据,无奈人家不要开放下载啊,所以就只能矢量化咯, 矢量化,无外乎手动和自动,手动就是新建shp面手动勾绘,这里就不讲了,我们来看看自动矢量化 自动矢量化在arcgis中主要是利用arcscan和栅格转面(栅格转面这个效果真是一言难尽,所以我们主要讨论arcscan) 同时我们矢量化也不一定要局限于arcgis...

Jasenjane的博客 3926

Python连接Oracle数据库:cx_Oracle与oracledb库的比较与选择

Python 访问 Oracle可以通过两种Oracle官方库:旧驱动:cx_Oracle(需要安装Oracle Instant client)新驱动:oracledb(Oracle数据库12.1或更高版本不需要安装 Oracle Instant client)

学习笔记 4142

Xilinx实战-深入AXI UART Lite IP核的配置与调试

本文详细介绍了Xilinx FPGA中AXI UART Lite IP核的配置与调试方法,包括Vivado环境下的IP核设置、关键参数优化、寄存器操作及常见问题排查。通过实战案例和代码示例,帮助开发者快速掌握AXI接口的串口通信技术,提升嵌入式系统开发效率。

weixin_29189377的博客 227

POJ 1276 Cash Machine

Cash Machine   A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill d...

dbt3498的博客 270

从零到一构建一个智能爬虫 Agent 完整教程

本文将打造一个具备自主决策、动态解析、反反爬、持久化能力的智能爬虫 Agent

数据知道的博客 4793

36、真核生物RNA PolII启动子预测相关研究

本文综述了真核生物RNA聚合酶II启动子预测的研究进展,涵盖转录调控机制、核心启动子元件(如TATA框、INR、GC框)、转录因子结合位点预测的挑战与方法。介绍了基于权重矩阵、神经网络和隐马尔可夫模型等多种启动子预测算法,并探讨了启动子分类策略及评分加权方法。通过Hertz-Stormo-Hartzell流程和基因微阵列分析实例,展示了如何识别保守调控序列。文章还总结了当前预测技术的局限性,提出了整合多组学数据、开发深度学习模型、加强实验验证等未来研究方向,旨在提升启动子识别的准确性与生物学意义。

palm99的专栏 187

POJ1276 Cash Machine————多重背包的二进制优化

题解:本题主要考查多重背包的二进制优化 简要题意:已知每种纸币的面值和数量,现在要凑某个数额的钱,最多可以凑多大的值(不能超过这个数额)。 1.多重背包:我们可以二进制优化多重背包,注意了这里的价值和体积一样 代码如下: #include<iostream> #include <cstdio> #include <algorithm> using namespa...

wly1127的博客 198

【WRF湿度调整策略】WRF/ERA5湿度数据对比

【WRF湿度调整策略】WRF/ERA5湿度数据对比

WW、forever的博客 118

POJ 1276 Cash Machine 【多重背包-二进制优化】

Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29995   Accepted: 10805 Description A Bank plans to install a machine for cash withdrawal. The mac

wyjwyl的专栏 563

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ 1276 Cash Machine 多重背包+二进制优化

来源:http://poj.org/problem?id=1276 题意:就是有一些一定数量和一定面值的钱,还有一个总钱数,让你在所给的纸币中选出一定数目的钱,使这些钱的和小于等于总钱数,并且使这个和尽可能的大。 思路:将总钱数看作是背包的体积,将钱币的面值看作是物体的体积,物体的价值和体积相等。即转化为多重背包问题,由于数据比较大,所以需要用到二进制优化。 代码: #include #

969

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

多重背包 二进制优化 POJ 1276 Cash Machine

多重背包的要求,是分别给出不同物品的最大数量。         其实多重背包最简单的做法就是将一种数量为n的的物品看作n件不同的物品,从而使用01背包,也就是在01背包的基础上,再加一个for循环,但是其算法复杂度较高,因此我们会运用二进制分解优化算法。         首先,要知道一句话,把一个数c分解成若干个小于等于c的数的集合,这个集合中的数任意相加可以得到所有小于等于c的数。这句话是我

SDNU lyk的博客 314

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[POJ] 1276 Cash Machine:二进制优化的多重背包问题

一.题目描述 二. 解题思路 该题如果套用普通的多重背包问题那么会超时,因此我们必须降低时间复杂度。下面来介绍多重背包的二进制优化,优化后多重背包问题就转化为普通的01背包问题。 二进制拆分思想: 假设第i种物品有si件,将第i种物品拆分成若干件物品,每件物品的件数和价值乘以一个拆分系数(1,21,22,…,2k-1,si-(2k-1))。例如si=12,那么拆分系数就是1,2,4,5,转化成4件01背包的物品:(vi,wi),(2vi,2wi),(4vi,4wi),(5vi,5wi),那么就由原来的12

qq_43406565的博客 251

[多重背包] POJ1276 Cash Machine (二进制优化)

题目 有各种不同面值的货币,每种面值的货币有不同的数量,请找出利用这些货币可以凑成的最接近且小于等于给定的数字cash的金额。 思路 多重背包模板题。 1.朴素的多重背包,每个状态转移时枚举用的某种货币的个数,复杂度:O(C∗∑n[i])O(C∗∑n[i])O(C*\sum n[i]),TLE。 2.二进制优化,背包九讲里面有。 此处应该注意的是,1…n的任意整数用尽量少的几个整数表示...

OI - IceCab 473

poj-1276 Cash Machine 多重背包+二进制优化

题目链接poj-1276 Cash Machine题目Cash MachineTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 38161 Accepted: 13858DescriptionA Bank plans to install a machine for cash withdrawal. The machine is a...

iwts 361

Cash Machine POJ - 1276 多重背包二进制优化

题意:多重背包模型 n种物品 每个m个 问背包容量下最多拿多少 这里要用二进制优化不然会超时 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=100000+10; ...

azmkinbug41973327的博客 147

POJ 1276Cash Machine(多重背包 + 二进制优化)

题目大概意思是酱紫的    先给你两个数字 第一个代表目标金钱 第二个代表钞票的种类  (我这么理解的) 然后在给你n组数据 分别代表  某种面值的钞票有多少多少张 由于之前做过类似的题目 就没有用直接暴力怼  先加了一个二进制优化 简单讲一下二进制优化是什么意思 : 二进制优化: 假设面值为1的钞票你有100张  普通做法是在数组中记录两百个1  就会很复杂  二进制优化的思想

看起来喜欢做枯燥事情的人或许只是更清楚自己想要什么罢了 666

poj1276Cash Machine ——多重背包二进制优化

原题链接:poj1276 cash machineLanguage:Default Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36835 Accepted: 13373 DescriptionA Bank plans to install a machine for cash withd

Lngxling的博客 485

(POJ-1276)Cash Machine(二进制优化+多重背包)

题目链接:1276 -- Cash Machine 题意:先给你一个背包容量,然后给你n种物品每种物品的体积和数量,问最多能装的物品的体积是多少? 多重背包经过二进制优化就相当于01背包,什么是二进制优化呢?就是说一种物品有m件,我们在多重背包问题求解过程中会依次遍历取多少件,这样复杂度有点高,而二进制优化就是说把2^s件物品当成一件物品来取,这样原来需要取2^s次现在只需要取一次,复杂度会大大降低,那这样做的正确性应该如何证明呢? 我们假设最优答案中包含这种物品k件,然后我们把m分成若干个连续的

AC__dream的博客 919

POJ - 1276 Cash Machine 多重背包 二进制优化模板

A Bank plans to install a machine for cash withdrawal. The machine is able to deliver appropriate @ bills for a requested cash amount. The machine uses exactly N distinct bill denominations, say Dk, k...

hutwuguangrong的博客 174

POJ 1276 Cash Machine 多重背包--二进制优化

点击打开链接 Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28337   Accepted: 10113 Description A Bank plans to install a machine for cash w

代码改变世界,keep coding。 1284

【多重背包+二进制优化】POJ 1276 Cash Machine

http://poj.org/problem?id=1276 Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28337   Accepted: 10113 Description A Bank plans to install a machine for ca...

荷叶田田 421
上一篇: 51nod-1379 扔盘子
下一篇: L3-002 特殊堆栈
admin__
博客等级 码龄8年 3粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值