`
Simone_chou
  • 浏览: 192505 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

Cash Machine(多重背包)

    博客分类:
  • POJ
 
阅读更多
Cash Machine
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 24543   Accepted: 8596

Description

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.

    题意:

    给出N钱(1到100000)和M种钱币(0到10),随后给出每一种钱币的数量num(0到1000)和价值val(0到1000)。问如何凑数,在不超过总钱数的钱数下达到最大值。

 

    思路:

    多重背包。

 

    AC1:

#include<stdio.h>
#include<string.h>
int cash,kind;
int num[15],mon[15];
int dp[100005];

void zeroonepack(int number,int money)
{
     for(int j=cash;j>=money;j--)
       if(dp[j]<dp[j-money]+money)
       dp[j]=dp[j-money]+money;
     return;
}

void completepack(int number,int money)
{
     for(int j=money;j<=cash;j++)
       if(dp[j]<dp[j-money]+money)
       dp[j]=dp[j-money]+money;
     return;
}

void multipack(int number,int money)
{
     int k=1;
     if(number*money>cash)
       completepack(number,money);
     else
     {
       while(k<number)
       {
         zeroonepack(number*k,money*k);
         number-=k;
         k+=k;
       }
       zeroonepack(number*number,money*number);
     }
    return;
}

int main()
{
    while(scanf("%d%d",&cash,&kind)!=EOF)
    {
      memset(dp,0,sizeof(dp));
      for(int i=1;i<=kind;i++)
        scanf("%d%d",&num[i],&mon[i]);
      for(int i=1;i<=kind;i++)
        multipack(num[i],mon[i]);
      printf("%d\n",dp[cash]);
    }
    return 0;
}

 

    AC2:

#include<stdio.h>
#include<string.h>
int cash,kind;
int mon[1000];
int dp[150000];

int main()
{
    while(scanf("%d%d",&cash,&kind)!=EOF)
    {
      int number,money,k=0;
      memset(dp,0,sizeof(dp));
      for(int i=1;i<=kind;i++)
      {
        scanf("%d%d",&number,&money);
        for(int j=1;j<=number;j++)
          mon[k++]=j*money,number-=j;
        if(number>0)
          mon[k++]=number*money;
      }
      for(int i=0;i<k;i++)
        for(int j=cash;j>=mon[i];j--)
        if(dp[j-mon[i]]+mon[i]>dp[j])
        dp[j]=dp[j-mon[i]]+mon[i];
      printf("%d\n",dp[cash]);
    }
    return 0;
}

 

 

 

分享到:
评论
1 楼 yomean 2013-10-21  
怎么全是背包的。。?

相关推荐

    POJ1276-Cash Machine

    【标题】"POJ1276-Cash Machine"是一个编程竞赛题目,源自北京大学的在线判题系统POJ(Problem Set of Peking University)。这个题目挑战程序员解决现金自动取款机(ATM)的现金提取问题,涉及到算法设计和实现。 ...

    北大POJ1276-Cash Machine

    北大POJ1276试题代码

    《Google Cash》快速致富手册

    "《Google Cash》快速致富手册"知识点 Google Cash 概述 《Google Cash》快速致富手册是国外高手的操作技巧,旨在指导读者如何快速致富。该手册由 Chris Carpenter 编写,Heidi Morris 编译,旨在帮助读者学习如何...

    c#Cash缓存类

    本篇文章将深入探讨"C# Cash缓存类"这一主题,包括它的工作原理、如何使用以及它在实际项目中的应用。 缓存是提高应用程序性能的关键技术之一,通过将常用数据暂存到内存中,可以避免频繁地访问数据库或远程服务,...

    cashmachine:用于尝试框架的 Cash Machine 应用程序

    提款机什么是提款机? 在我们这个时代,有很多 javascript 客户端和后端框架。 但是为了更好地理解我们应该练习,所以我创建了 repo 来使用不同的框架在那里编写相同的应用程序“取款机”。 该应用程序有背面和...

    Node.js-Cash-一个用ES6编写的跨平台实现Unixshell命令实现

    **Node.js Cash 知识点详解** `Cash` 是一个基于 `Node.js` 的开源项目,它使用 `ES6` 语法实现了一个跨平台的工具,可以模拟 Unix shell 命令,使得开发者在 Windows、Linux 和 macOS 等不同操作系统上能够享受到...

    cash 表单提交checkbox 多选

    html checkbox cash 表单提交checkbox 多选

    Cash flow review

    cash flow review. explain what the meaning of cash flow.

    CASHAPP LOADING WITH DIRECT DEPOSIT_Cashapp_carding_

    【标题】:“CASHAPP LOADING WITH DIRECT DEPOSIT_Cashapp_carding_”指的是一个关于使用Cash App进行直接存款加载的教程,同时涉及到卡牌欺诈(carding)的话题。在这个标题中,我们可以提取两个主要的知识点:...

    Cash Products & Trade

    标题《Cash Products & Trade》指的是现金产品与贸易,这通常涉及现金管理、流动性管理、应收应付解决方案以及交付渠道等与金融产品和现金流相关的一系列金融服务。现金产品是银行及金融机构提供给企业客户用于管理...

    安卓cash跳转

    import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View;...import android.view.View.OnClickListener;...public class ...安卓开发中cash跳转的用法

    cash数据集

    - **支持向量机(Support Vector Machine,SVM)**:特别是当数据不是线性可分时,SVM能够提供较好的分类效果。 - **随机森林(Random Forest)**:是一种基于决策树的集成方法,对于非均衡数据集有较好的适应能力。...

    Python库 | Cash-App-Hack-Money-Generator-2021-2.2.1.tar.gz

    python库。 资源全名:Cash-App-Hack-Money-Generator-2021-2.2.1.tar.gz

    前端项目-cash.zip

    【前端项目-cash.zip】是一个包含了前端开发资源的压缩包,其主要针对现代浏览器环境,提到了jQuery在其中的角色。这个项目可能是一个基于JavaScript库或框架构建的Web应用程序,而jQuery是一个广泛使用的JavaScript...

    cash-machine-python-

    CaixaEletrônico-Python :laptop: 普罗耶托脚本feito com Python,atravésda plataforma School of Net。sen Desenvolvedor

    《Google Cash》Google AdWords 快速致富手册中文版

    《Google Cash》是一本专注于利用Google AdWords进行网络营销和赚钱策略的手册,它为读者揭示了如何通过这个全球最大的搜索引擎平台实现快速盈利的秘密。Google AdWords是Google公司提供的在线广告服务,允许商家...

    下属cash.pptx

    下属cash.pptx

    cash-machine-node-react

    安装依赖项 在根目录中运行npm i 在/ client目录中运行npm i Postgres设定 安装postgres 更改db / index.js中的pg连接字符串以匹配您的数据库设置 运行node node_modules/connect-pg-simple/table.sql设置表以存储...

    GNU Cash Help

    GNU Cash是一款功能强大的开源财务软件,它为个人和小型企业提供了管理收入与支出的专业工具。这款软件基于GNU项目,遵循自由软件基金会的GPL许可证,旨在提供一个免费且灵活的财务管理解决方案。 GNU Cash的核心...

Global site tag (gtag.js) - Google Analytics