Coins【暑期培训Z题】【多重背包】

2023-11-02

        一道用来防AK的题,但是被我们给弄出来了,还是挺可以的。

People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(without change) and he known the 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. 
Input
The input contains several test cases. The first line of each test case contains two integers n(1<=n<=100),m(m<=100000).The second line contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1<=Ai<=100000,1<=Ci<=1000). The last test case is followed by two zeros.
Output
For each test case output the answer on a single line.
Sample Input
3 10
1 2 4 2 1 1
2 5
1 4 2 1
0 0
Sample Output
8
4

        这道题就是要我们求在一定范围内,能够用手头上的一定数量的钱构成几种类型的总和,譬如一个一块和一个两块,在三块钱范围内能组成{1}、{1+2}、{2}的组合。

        思路:这道题如果用普通的多重背包,例如这样(就会超时):

for(int i=0; i<n; i++)

{

for(int j=1; j<=coin[i].b; j++)

{

for(int k=m; k>=coin[i].a*j; k--)

{

if(dp[k-coin[i].a] && !dp[k])

{

dp[k]=1;

sum++;

}

}

}

}

既然都说过了会超时,当然也会讲不超时的算法和思路,

    上面我们用了3个for循环O(n^3)的算法当然的T,我们发现第三个for中的

int k=m; k>=coin[i].a*j; k--

会被一遍遍的遍历,那么我们换种方式,假如知道此时取了几次岂不是更好,那么用一个s数组来存储到达这一个值我们所用去的步数就可以了。

利用s[i]与dp[i]同步的方法,记录到达这个值时候的步数,我们仅需要在循环中假如条件:

s[k-coin[i].a]<coin[i].b

即可,但为什么取小于符是因为原式应当为s[k]<=coin[i].b,但由于s[k]为接下来的处理量,所以我们才对它的前一步进行处理。


完整代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m;
struct node
{
    int a,b;        //价值,数量
}coin[105];
int dp[100005];
int s[100005];
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0&&m==0)break;
        memset(coin, 0, sizeof(coin));
        memset(dp, 0, sizeof(dp));
        dp[0]=1;
        int sum=0;
        for(int i=0; i<n; i++)
        {
            scanf("%d",&coin[i].a);
        }
        for(int j=0; j<n; j++)
        {
            scanf("%d",&coin[j].b);
            if(coin[j].a*coin[j].b>m)
            {
                coin[j].b=m/coin[j].a;
            }
        }
        for(int i=0; i<n; i++)
        {
            memset(s, 0, sizeof(s));
            for(int k=coin[i].a; k<=m; k++)
            {
                if(dp[k-coin[i].a] && !dp[k] && s[k-coin[i].a]<coin[i].b)
                {
                    dp[k]=1;
                    s[k]=s[k-coin[i].a]+1;
                    sum++;
                }
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Coins【暑期培训Z题】【多重背包】 的相关文章

  • springboot项目配置多数据库连接

    前言 之前编写了一篇maven项目创建多数据库的方法 现在对springboot更了解之后 将把springboot项目配置多数据库的方法贴出来 从项目开始创建到调用数据库依次写出来 PS 本项目使用的是IDEA进行创建 创建springb
  • engine.js[dwr]javascript

    Copyright 2005 Joe Walker Licensed under the Apache License Version 2 0 the License you may not use this file except in
  • SQL注入绕过的姿势

    1 注释符绕过 常用的注释符有 1 注释内容 2 注释内容 3 注释内容 eg union select 1 2 union select 1 2 构造闭合 union select 1 2 2 大小写绕过 常用于 waf的正则对大小写不敏
  • 搭建和部署nuxt项目

    说在前面的话 vue js开发的SPA是不利于seo的 搜索引擎对它支持的并不是太好 百度根本就不可以在SPA应用的页面抓取数据 这对很看重seo优化的网站来说肯定是不能容忍的 而使用nuxt开发的网站就可以让爬虫爬取 而且它是基于vue
  • 神经网络轮廓特征是什么,神经网络轮廓特征图

    神经网络 的四个基本属性是什么 神经网络 的四个基本属性 1 非线性 非线性是自然界的普遍特征 脑智能是一种非线性现象 人工神经元处于两种不同的激活或抑制状态 它们在数学上是非线性的 由阈值神经元组成的网络具有更好的性能 可以提高网络的容错
  • 游学电子教您:如何给原子的imx6开发板烧录Linux系统

    义县游学电子科技有限公司官方帐号 科技爱好者 今天游学电子带您一起学习下imx6开发板如何烧录系统 使用的开发板是原子的 这里有个注意的地方是我们烧录的系统是到emmc中 而非sd卡中 01 步骤方法 把开发板的启动拨码开关拨到 USB 模
  • FPN、PAN在计算机视觉(CV)领域的意思

    FPN Feature Pyramid Network的首字母缩写 即特征金字塔网络的意思 PAN Pixel Aggregation Network的首字母缩写 即像素聚合网络的意思 名词出处 Path Aggregation Netwo
  • 2022-03-14

    一 你在工作中用到了什么设计模式 怎么用的 1 单例模式 编写kafka共用sdk写入的时候 使用了单例模式 不管new多少次kafkaProducer实例 最终都是一个 采用了静态内部类初始化方式 使用阿里云oss sdk的时候 创建的c
  • 【Git系列】Git下载与安装教程

    Git下载与安装教程 1 下载 2 安装 其他系列 Git最详细的体系化教程 1 下载 官网下载地址 https git scm com downloads 淘宝镜像下载地址 http npm taobao org mirrors git
  • YOLOv2论文理解

    YOLO9000 Better Faster Stronger 论文YOLO9000 Better Faster Stronger的主要内容有三点 1 作者提出了YOLOv2 YOLOv2在YOLOv1的基础上 使用新的网络结构 darkn

随机推荐

  • 西瓜书学习笔记第5章【神经网络】

    西瓜书学习笔记第5章 神经网络 5 1神经元模型 5 2 感知机与多层网络 一 感知机 二 多层功能神经元 多层网络 5 3误差逆传播算法 反向传播 BP 算法 对各个参数更新公式的推导 早停 early stopping 正则化 regu
  • SQL Server修改数据

    本篇主要讲解的是SQL Server 中修改数据的几种语句 INSERT语句 INSERT INTO SELECT语句 UPDATE语句 DELETE语句 一 INSERT语句 INSERT语句向表中添加新行 以下是INSERT语句的最基本
  • 比较IP代理与路由器获取IP地址的三大差异

    在今天的文章中 我们将与大家一起探讨IP代理与路由器获取IP地址的差异 这两种方式在获取IP地址上有一些区别 而这些区别会对我们的网络使用体验产生影响 今天我们深入分析并提供一些实际的例子与操作经验 稳定性差异 通过路由器获取IP地址时 我
  • 字段明明存在,用Web API使用该字段进行查询报错?

    我是微软Dynamics 365 Power Platform方面的工程师罗勇 也是2015年7月到2018年6月连续三年Dynamics CRM Business Solutions方面的微软最有价值专家 Microsoft MVP 欢迎
  • (一)MyBatis

    一 MyBatis特性 1 MyBatis 是支持定制化 SQL 存储过程以及高级映射的优秀的持久层框架 2 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 3 MyBatis可以使用简单的XML或注解用于配置
  • Unity——射线检测

    1 new Raw cube0 transform Vector3 forward 射线 第一个参数 射线的起始点 第二参数 射线的方向 myray new Ray this gameObject transform position Ve
  • Flutter系列之Navigator组件使用

    PS 想做一件事很容易 真正去做一件事很困难 同系列文章如下 Flutter系列之Navigator使用详解 Flutter系列之Flex布局详解 Flutter系列之图片加载详解 Flutter系列之Widget生命周期 Flutter系
  • 基于AT指令开发短信程序

    基于AT指令开发短信程序 本人的专职工作是做手机底层软件中SMS和CBS的功能模块软件 对SMS的PDU格式可以说是比较了解 在网上查找了一下感觉目前国内公开的软件大多功能比较单一 主要特点如下 1 支持分页短信 最大可以支持15个分页 可
  • Python利用selenium+Beautifulsoup破解动态class/id并提取相应文本的方法

    最近小白掌柜接了领导一项任务 要全程自动化的注册一个网站并登录网站后逗留一段时间再离开 起初觉得这个应该难度不会太大 就欣然接受了 谁知 拿到具体需求后一分析纳尼 这个里面其实有好多难点 but本着我就是进阶的小白还是决定挑战下去 今天先不
  • 【Python】如何在Python中绘制带有连接线的双饼图?

    文章目录 一 导入所需的库 二 准备数据 三 绘制双饼图 3 1 创建画布和子图对象 3 2 绘制大饼图 3 3 绘制小饼图 3 4 连接线1 连接大饼图的上边缘和小饼图的饼块 3 5 连接线2 连接大饼图的下边缘和小饼图的饼块 3 6 添
  • 强化学习笔记

    强化学习笔记 简介 本文是根据 Sutton的经典书籍 Reinforcement Learning An Introduction 前三章内容整理的笔记 枯燥预警 本文侧重对强化学习概念的理论分析 在基本概念上的剖析较为详细 也就是说会比
  • 深入剖析mmap原理 - 从三个关键问题说起

    作者 招财二师兄 链接 https www jianshu com p eece39beee20 来源 简书 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 对于mmap 您是否能从原理上解析以下三个问题 1 mmap比
  • 部署docker wsl下载ubuntu时报错无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/Dist

    挂科了个VPN好了 真是莫名其妙
  • 行列式求值、矩阵求逆

    include
  • CSS:渐变属性

    渐变属性 transition 值 参数1 定义需要渐变的属性 必填 常用值all 参数2 定义渐变需要的时间 必填 单位s 参数3 定义速度曲线 选填 默认ease慢快慢 常用linear匀速 参数4 定义效果延迟时间 选填 默认0 单位
  • SQL 注入漏洞(五)union 联合注入

    一 union 联合注入原理 联合查询注入是联合两个表进行注入攻击 使用关键词 union select 对两个表进行联合查询 两个表的字段数要相同 不然会出现报错 1 联合查询的错误方式 guestbook 表有三个字段 users 有八
  • 如何用logrotate管理每日增长的日志

    这篇文章主要介绍了如何用logrotate管理每日增长的日志问题 具有很好的参考价值 希望对大家有所帮助 如有错误或未考虑完全的地方 望不吝赐教 logrotate简介 logrotate is designed to ease admin
  • 2020秋招找工作总结

    找完工作闲了很久 现在还是想写点什么 留给未来的自己看看吧 本人双非 渣硕 面试岗位 C C 软件开放岗 嵌入式软件开放岗 从时间先后顺序面试了以下几家公司 网易游戏 雷火 广州腾讯 成都浦发银行 成都华为 成都汇顶科技 成都烽火 成都紫光
  • 昇腾应用案例体验:(5) 全目标结构化

    昇腾AI应用 探索人工智能的无限可能 使能千行百业 全目标结构化 概述 全目标结构化旨在处理海量视频 图像等机器无法理解的非结构化数据 从中挖掘潜在有价值信息并将其结构化存储 本例基于 mxVision 提供的插件以及自开发的目标挑选 人脸
  • Coins【暑期培训Z题】【多重背包】

    一道用来防AK的题 但是被我们给弄出来了 还是挺可以的 People in Silverland use coins They have coins of value A1 A2 A3 An Silverland dollar One da