题目背景

小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎。


题目描述

现在有$m+1$个星球,从左到右标号为$0$到$n$,小奇最初在$0$号星球。
有$n$处矿体,第$i$处矿体有$a_i$单位原矿,在第$b_i$个星球上。
由于飞船使用的是老式的跳跃引擎,每次它只能从第$x$号星球移动到第$x+4$号星球或$x+7$号星球。每到一个星球,小奇会采走该星球上所有的原矿,求小奇能采到的最大原矿数量。
注意,小奇不必最终到达$m$号星球。


输入格式

第一行$2$个整数$n$,$m$。
接下来$n$行,每行$2$个整数$a_i$,$b_i$。


输出格式

输出一行一个整数,表示要求的结果。


样例

样例输入:

3 13
100 4
10 7
1 11

样例输出:

101


数据范围与提示

样例解释:

第一次从$0$到$4$,第二次从$4$到$11$,总共采到$101$单位原矿。

数据范围:

对于$20\%$的数据$n=1$,$m\leqslant {10}^5$。
对于$40\%$的数据$n\leqslant 15$,$m\leqslant {10}^5$。
对于$60\%$的数据$m\leqslant {10}^5$。
对于$100\%$的数据$n\leqslant {10}^5$,$m\leqslant {10}^9$,$1\leqslant a_i\leqslant {10}^4$,$1\leqslant b_i\leqslant m$。


题解

依然是观察数据范围,发现$60\%$的$DP$很好打,定义$dp[i]$表示到了$i$的最大原矿数量,那么状态转移方程也很简单:$dp[i]=\max(dp[i-4],dp[i-7])+x[i]$,式中$x[i]$表示$i$点的原矿数量为$x[i]$。

但是显然对于$100\%$的数据无论是时间还是空间都是不允许的,所以考虑进行优化。

这时候你的思路很可能就想到了某种玄学的数据结构,但是如果你做过$NOIP\ 2017\ D1T1$小凯的疑惑的话,你可能就乐了。

没错,这道题也涉及到了赛瓦维斯特定理

我们会发现,仅$4$和$7$两个数字最大的不能组成的数字为$4\times 7-4-7=17$,那么所有大于$17$的数字都是能由$4$和$7$通过加减凑出来的,于是我们可以考虑离散化,之后两点大于$17$的就将其距离付成$18$即可,考场上有好多同学打了一种会被卡的方法,但是$A$了这道题,然而这种做法不会被卡,应该是这道题最严谨的一种做法了。

时间复杂度:$\Theta(18\times n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m;
pair<int,int> pos[100010];
int delta[100010];
int dp[2000010];
int Map[2000010];
int p;
int ans;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
pos[i]=make_pair(b,a);
}
sort(pos+1,pos+n+1);
memset(dp,-0x3f,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
delta[i]=min(18,pos[i].first-pos[i-1].first);
for(int i=1;i<=n;i++)
{
p+=delta[i];
Map[p]+=pos[i].second;
}
for(int i=4;i<=p;i++)
{
dp[i]=max(dp[i],dp[i-4]+Map[i]);
if(i>6)dp[i]=max(dp[i],dp[i-7]+Map[i]);
}
for(int i=1;i<=p;i++)ans=max(ans,dp[i]);
cout<<ans<<endl;
return 0;
}

rp++

[CSP-S模拟测试]:小奇挖矿2(DP+赛瓦维斯特定理)的更多相关文章

  1. 【BZOJ4711】小奇挖矿 树形DP

    [BZOJ4711]小奇挖矿 Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓库并把矿石运到各个仓库里. [问 ...

  2. [CSP-S模拟测试]:小奇的仓库(warehouse)(树形DP)

    题目背景 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 题目描述 喵星系有$n$个星球,星球以及星球间的航线形成一棵树.从星球$a$到星球$b ...

  3. [CSP-S模拟测试]:小奇的矩阵(matrix)(DP+数学)

    题目背景 小奇总是在数学课上思考奇怪的问题. 题目描述 给定一个$n\times m$的矩阵,矩阵中的每个元素$a_{i,j}$为正整数.接下来规定:    $1.$合法的路径初始从矩阵左上角出发,每 ...

  4. bzoj 4711 小奇挖矿 —— 树形DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4711 就是树形DP,然而也想了半天才把转移想清楚: f[x][j][0] 表示 x 去上面 ...

  5. 联赛膜你测试20 T1 Simple 题解 && NOIP2017 小凯的疑惑 题解(赛瓦维斯特定理)

    前言: 数学题,对于我这种菜B还是需要多磨啊 Simple 首先它问不是好数的数量,可以转化为用总数量减去是好数的数量. 求"好数"的数量: 由裴蜀定理得,如果某个数\(i\)不能 ...

  6. NOIP2017 小凯的疑惑 解题报告(赛瓦维斯特定理)

    题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想知道在无法准确支付的物品中,最贵的 ...

  7. 【NOIP模拟赛】小奇挖矿 2

    [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小奇最初在0 ...

  8. NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

  9. 2.17NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

随机推荐

  1. Mongodb php扩展及安装

                            Mongodb php扩展 Mongodb安装 1: 下载mongodb www.mongodb.org 下载最新的stable版 2: 解压文件 3: ...

  2. Hadoop(2): Blocks存储管理及读写

    1. Replication: 因为每个HDFS被部署在是低成本的商业硬件上(low cost commodity hardware),所以为了有更佳的Fault Tolerance,HDFS将每个B ...

  3. 07 (H5*) js课程第8天 高阶函数、闭包、沙箱

    目录: 1:call和apply方法调用 2:bind方法复制 3:函数中的几个属性值 4:高阶函数,函数作为参数 5:高阶函数,函数作为返回值. 6:   作用域链,作用域,预解析 7:闭包--延长 ...

  4. (1)leetcode刷题Python笔记——两数之和

    题目如下: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数 ...

  5. C++ STL map容器值为指针时怎么释放内存

    最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSo ...

  6. [Linux] 015 用户管理命令

    1. 用户管理命令:useradd 命令名称:useradd 命令所在路径:/bin/sbin/useradd 执行权限:root 语法:useradd 用户名 功能描述:添加新用户 范例: $use ...

  7. 深入理解DiscoveryClient

    Spring Cloud Commons 提供的抽象 最早的时候服务发现注册都是通过DiscoveryClient来实现的,随着版本变迁把DiscoveryClient服务注册抽离出来变成了Servi ...

  8. kvm扩容home目录

    KVM虚拟磁盘扩容 1.磁盘扩容分为raw和qcow2两种扩容方式,命令相同,区别是后缀名 [root@daixuan ~]# qemu-img info /data/daixuan1.qcow2 / ...

  9. pandas分组聚合案例

    美国2012年总统候选人政治献金数据分析 导入包 import numpy as np import pandas as pd from pandas import Series,DataFrame ...

  10. 阿里云云监控agent插件 - Linux版

    阿里云云监控agent插件使用指南 1.安装(注意,要以“root”权限运行,复制 sudo后面的就行,别把#也复制进去) #64位 # sudo bash -c "wget -e 'htt ...