[NOI Online #3 入门组 T3]买表【二进制优化dp背包】

2023-11-05

题目链接


  很可惜的一点就是,我正赛的时候好像把a和k看反了,于是一直想不到如何做,打了个暴力分,现在想想,暴力分也错了,因为a和k真的很关键,使得最后300变成200分,人生第一场OI就这样草草结束——或许这就是OI选手的刺激所在吧(得亏我不打正式赛

  题目中的k指的是面额,而a指的是数量!

  于是,我们可以用二进制优化的思想,将原来1000个的数量,优化到10个,于是复杂度就变成了O(max(ti) * n * log(n))这样的复杂度,能恰到好处的把题卡过去,是真的卡过去的。数据较强。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 205;
int N, M, cnt;
ll k[maxN], a[maxN], v[maxN * 20], dp[500005] = {0};
signed main()
{
    scanf("%d%d", &N, &M);
    cnt = 0;
    for(int i=1; i<=N; i++)
    {
        scanf("%lld%lld", &k[i], &a[i]);
        for(int j=1; j<=a[i]; j <<= 1)
        {
            v[++cnt] = j * k[i];
            a[i] -= j;
        }
        if(a[i]) v[++cnt] = a[i] * k[i];
    }
    dp[0] = 0;
    for(int i=1; i<=cnt; i++)
    {
        for(int j=500000; j>=v[i]; j--)
        {
            dp[j] = max(dp[j], dp[j - v[i]] + v[i]);
        }
    }
    int x;
    while(M--)
    {
        scanf("%d", &x);
        printf(dp[x] == x ? "Yes\n" : "No\n");
    }
    return 0;
}

 

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

[NOI Online #3 入门组 T3]买表【二进制优化dp背包】 的相关文章

  • 备战2023蓝桥国赛-移动服务

    题目描述 解析 这道题我想复杂了 一开始我是这样想的 设dp i j 表示按顺序满足到第i个请求时 最初在j号点的人到达第i个请求的位置的情况下的最小花费 state i j 表示按顺序满足到第i个请求时 最初在j号点的人到达第i个请求的位
  • DNA repair 【HDU - 2457】【AC自动机+DP思路】

    题目链接 开始肝这道题的时候也是冒了十足的勇气 呜呜呜 当时一直没发现 我有个地方写成了 s i A 怎么能这样用啊 毕竟只有A C G T的说 呜呜呜 QAQ 然后讲一下 这道题的AC自动机的想法 还有DP的思路 我DP超菜 能过也是超神
  • 算法课四

    算法报告四 Dijkstra算法 最短距离 16122020 钟顺源 一 题目大意 给出一张图 并给定起点和终点 问起点到终点的最短距离是多少 有两个特殊要求 1 如果从顶点i到顶点j有不止一条最短路径 那么输出路段数最少者 2 如果具有最
  • floyd算法 O(n^3)

    标准弗洛伊德算法 三重循环 循环结束之后 d i j 存储的就是点 i 到点 j 的最短距离 需要注意循环顺序不能变 第一层枚举中间点 第二层和第三层枚举起点和终点 特点 1 复杂度为O n 3 只能处理200以内的点 2 一次求出所有结点
  • LeetCode: 91 解码方法

    方法一 用递归来做 这道题一开始以为是简单的递归问题 按照从前往后的顺序递归 总是在 10 这个输入上报错 按照从后向前的方法递归 应对短序列没有问题 但是面对长序列 因为存在大量重复计算 所以超时 如果用递归来做 应该用记忆化递归 cla
  • 【Luogu_P2758】编辑距离【动态规划】

    思路 设f i j 标识a匹配到i位 b匹配到j位 于是很好转移 c o d e code code include
  • 【DP练习】美元DOLLARS

    1040 练习题目 美元DOLLARS Description 在以后的若干天里戴维将学习美元与德国马克的汇率 编写程序帮助戴维何时应买或卖马克或美元 使他从100美元开始 最后能获得最高可能的价值 Input 输入文件的第一行是一个自然数
  • 免费馅饼【暑期集训I题】【经典DP】

    这不是一道很废脑汁的题目 可以说和前面的数塔相同 只是题目讲的长了些而已 都说天上不会掉馅饼 但有一天gameboy正走在回家的小径上 忽然天上掉下大把大把的馅饼 说来gameboy的人品实在是太好了 这馅饼别处都不掉 就掉落在他身旁的10
  • 最大子矩阵(动态规划c++)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和 给定一个矩阵 你的任务是找到最大的非空 大小至少是1 1 子矩阵 比如 如下4 4的矩阵 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 的最大子矩阵是 9 2 4 1 1
  • 蓝桥杯--砝码称重(dp)

    砝码称重 题目评测 你有一架天平和 N 个砝码 这 N 个砝码重量依次是 W1 W2 WN 请你计算一共可以称出多少种不同的正整数重量 注意砝码可以放在天平两边 输入格式 输入的第一行包含一个整数 N 第二行包含 N 个整数 W1 W2 W
  • hdoj-1069-Monkey and Banana【动态规划】

    Monkey and Banana Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 9489 Acc
  • Wireless Password 【HDU - 2825】【AC自动机+状压DP】

    题目链接 好题一道 推了一会 然后计算了一下时间复杂度 差不多最坏情况是25 100 1024 26 66560000然后看了下 嗯 能搞 有搞头哈哈哈 然后写了一下 首先 WA了 发现竟然是最大极限哪儿写错了 我的个天呐 A 我们看到最多
  • 石子合并(区间DP问题)

    题目描述 设有 N 堆石子排成一排 其编号为 1 2 3 N 每堆石子有一定的质量 可以用一个整数来描述 现在要将这 N 堆石子合并成为一堆 每次只能合并相邻的两堆 合并的代价为这两堆石子的质量之和 合并后与这两堆石子相邻的石子将和新堆相邻
  • The Lost House【树形DP+期望+构造路径】

    题目链接 POJ 2057 题意 有一棵N的点的树 开始的时候蜗牛在1号结点 它不知道它的家在哪个叶子结点 树上的有些结点有虫虫 虫虫会告诉你 你的家是否在以它所在结点为根的子树上 现在需要你规划走的方案 使得找到哪个叶子结点才是家的所走路
  • 动态规划之背包问题

    本文有视频版 0 1背包问题详解 后台天天有人问背包问题 这个问题其实不难啊 如果我们号动态规划系列的十几篇文章你都看过 借助框架 遇到背包问题可以说是手到擒来好吧 无非就是状态 选择 也没啥特别之处嘛 今天就来说一下背包问题吧 就讨论最常
  • 骰子【概率dp】

    题目链接 P1409 骰子 因为会有人被弹出队列 所以我设置的期望dp为 表示当现在队列中有i个人的时候 第j个人获胜的概率 于是有当只剩一个人的时候 那个人必胜 再往下 先看它在队首的情况 也就是直接获胜的概率加上它被弹到队尾时候的概率
  • 递归、加法原理,如何分解问题(独立且完备的划分)

    加法原理适用于做一件事有n种独立不相交且完备的方向 每个方向上有ai种方案 则总的方案数就是 a1 a2 an 例题 把n个数分为k个非空子集 有多少种分法 分解问题 第一个集合里放多少个数把原问题的解分成了独立且完备的若干方向 分别解每个
  • Acwing2554. 排列数

    在一个排列中 一个折点是指排列中的一个元素 它同时小于两边的元素 或者同时大于两边的元素 对于一个 1 n 的排列 如果可以将这个排列中包含 t 个折点 则它称为一个 t 1 单调序列 例如 排列 1 4 2 3 是一个 3 单调序列 其中
  • 备战2023蓝桥国赛-传纸条

    题目描述 解析 这道题想了我好久 一开始我是想假如只走一条路线 从 1 1 走到 m n 这种问题该怎么解决呢 针对这种问题我是设了dp k i j 表示走了k步到达 i j 的好心程度之和的最大值 然后根据这个来写出转移方程来计算 后面就
  • 【DP】拔河比赛

    题目 一个学校举行拔河比赛 所有的人被分成了两组 每个人必须 且只能够 在其中的一组 要求两个组的人数相差不能超过1 且两个组内的所有人体重加起来尽可能地接近 输入 输入数据的第1行是一个n 表示参加拔河比赛的总人数 n lt 100 接下

随机推荐

  • 微信小程序复制取消默认提示内容和icon,小程序复制不显示复制内容

    wx setClipboardData默认提示消除问题 uni setClipboardData data url 要被复制的内容 success gt complete gt wx hideToast 企业微信发送微信小程序 企业微信需要
  • 注意记录Struts2关于值栈的理解,解决重复用户登录的问题

    充分体会这句话的含义
  • 查看ssh端口号_centos7修改默认ssh端口以及问题排查

    1 修改ssh端口号的方法 修改 sudo vi etc ssh sshd config 重启 sudo systemctl restart sshd service 重启后报错 Job for sshd service failed be
  • 以ed结尾的单词

    1 规则动词词尾加 ed有三种读音 1 1 以清辅音结尾 加 ed 在清辅音后读作 t 如 ask asked look looked help helped watch watched stop stopped work worked p
  • python离群点检测_python 离群点检测

    1 importnumpy as np2 importpandas as pd3 from sklearn cluster importKMeans4 importmatplotlib pyplot as mp5 6 7 defget da
  • [Python]Anaconda连接mysql数据库,生成的200个激活码保存在数据库

    Anaconda连接Mysql数据库 主要分为两步 1 安装mysql 这里注意mysql的版本不要超过5 5 可直接在百度栏搜索出现的mysql版本是最新的 要加上版本进行搜索 我给出我下载的链接 mysql 5 5 20 winx64
  • 创建一个crontab专用docker容器

    背景 K8S的一个POD通过PVC挂在了一个ceph rbd盘 但是希望可以通过脚本定期读取和操作rbd盘里的数据 我们不希望将crontab和app进程放到同一个容器内 并且RBD只支持单个节点的读写挂载 所以没办法通过其它POD来完成这
  • Linux MQTT 物联网通信

    目录 MQTT 报文 MQTT 简介 MQTT 协议 上 MQTT 通信基本原理 连接MQTT 服务端 MQTT 客户端连接服务端的两个步骤 CONNECT 请求报文 CONNACK 回复报文 断开连接 发布消息 订阅主题与取消订阅主题 P
  • Qt源码分析之QObject

    在分析源码之前 我们先来介绍下Pimpl机制 Pimpl机制介绍 Pimpl private implementation 字面意思是私有实现 具体实现是将类的 假设类A 私有数据和函数放入一个单独的类 假设类Pimpl 中 然后在类A的头
  • dubbo——管理员指南

    原文地址 http blog csdn net wilsonke article details 39935801 2014 10 09 18 36 3613人阅读 评论 0 收藏 举报 目录 管理员指南 安装手册 示例提供者安装 示例消费
  • FFT (快速傅里叶变换)

    FFT FFT FFT的全称是 Fast Fourier Transform 即快速傅里叶变换 傅里叶变换是复变函数的重要内容 傅里叶变换分为离散和连续傅里叶变换 傅里叶变换实现从时域到频域的转换 是信号与系统重要的分析工具 连续傅里叶变换
  • 设备管理 USB ID

    发现个USB ID站点 对于做设备管理识别的小伙伴特别实用 http www linux usb org usb ids 附录 List of USB ID s Maintained by Stephen J Gowdy
  • pytorch低版本找到并安装torch_geometric对应版本

    一 找到官网的安装命令 不同版本的torch geometric 对应的安装命令不完全一致 因此我们需要首先找到所需torch geometric版本的正确安装命令 然后再去找对应的版本 目前torch geometric官网上只有pyto
  • Win10环境下CPU+GPU版本基于YOLOv5的行人检测研究(包括Anaconda安装超详细)

    安装Anaconda 直达链接Anaconda 点击get started 点击Download Anaconda Installers 点击Download 然后保存执行文件即可 开始安装Anaconda 双击执行文件 Anaconda3
  • Java中的“+“运算符

    前言 前面已经对各类运算符有了一个总的认知 运算符用处很多 一 关于Java中的 运算符 1 当 两边确定都是数字的话一定是进行加法运算 2 当 两边的数据是字符串 1个 一定会进行字符串的连接运算 并且连接过后运算结果一 定 还是一个字符
  • 关于IP分片的一篇小论文

    关键字 IP分片 MTU MSS 引言 分片是分组交换的思想体现 也是IP协议解决的两个主要问题之一 在IP协议中的分片算法主要解决不同物理网络最大传输单元 MTU 的不同造成的传输问题 但是分组在传输过程中不断地分片和重组会带来很大的工作
  • 使用C语言操作环境变量

    获取环境变量内容 char getenv char name 参数 name欲获取的环境变量名称 返回值 环境变量值 NULL表示没有找到环境变量 设置环境变量 int putenv char string 参数 string环境变量字符串
  • linuxsed替换字符串后保存_字符串方法——replace()

    1 字符串方法 replace str replace old new max 参数说明 Parameters old 被替换的字符串 new 新字符串 替换原来的old字符串 max 可选参数 替换不超过max次 例子 Example s
  • 什么是抖动?什么叫抖动

    什么是抖动 什么叫抖动 抖动的定义是 数字信号的各个有效瞬时对其当时的理想位置的短期性偏离 这意味着抖动是不希望有的数字信号的相位调制 相位偏离的频率称为抖动频率 与抖动有密切关系的第二个参数称为漂移 把它定义为 数字信号的各个有效瞬间相对
  • [NOI Online #3 入门组 T3]买表【二进制优化dp背包】

    题目链接 很可惜的一点就是 我正赛的时候好像把a和k看反了 于是一直想不到如何做 打了个暴力分 现在想想 暴力分也错了 因为a和k真的很关键 使得最后300变成200分 人生第一场OI就这样草草结束 或许这就是OI选手的刺激所在吧 得亏我不