【每日一题】8月12日题目精讲 Mr. Kitayuta, the Treasure Hunter

来源:牛客网:

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

The Shuseki Islands are an archipelago of 30001 small islands in the Yutampo Sea. The islands are evenly spaced along a line, numbered from 0 to 30000 from the west to the east. These islands are known to contain many treasures. There are n gems in the Shuseki Islands in total, and the i-th gem is located on island pi.

Mr. Kitayuta has just arrived at island 0. With his great jumping ability, he will repeatedly perform jumps between islands to the east according to the following process:

First, he will jump from island 0 to island d.
After that, he will continue jumping according to the following rule. Let l be the length of the previous jump, that is, if his previous jump was from island prev to island cur, let l = cur - prev. He will perform a jump of length l - 1, l or l + 1 to the east. That is, he will jump to island (cur + l - 1), (cur + l) or (cur + l + 1) (if they exist). The length of a jump must be positive, that is, he cannot perform a jump of length 0 when l = 1. If there is no valid destination, he will stop jumping.
Mr. Kitayuta will collect the gems on the islands visited during the process. Find the maximum number of gems that he can collect.

输入描述:
The first line of the input contains two space-separated integers n and d (1 ≤ n, d ≤ 30000), denoting the number of the gems in the Shuseki Islands and the length of the Mr. Kitayuta’s first jump, respectively.

The next n lines describe the location of the gems. The i-th of them (1 ≤ i ≤ n) contains a integer pi (d ≤ p1 ≤ p2 ≤ … ≤ pn ≤ 30000), denoting the number of the island that contains the i-th gem.

输出描述:
Print the maximum number of gems that Mr. Kitayuta can collect.

示例1
输入
复制

4 10
10
21
27
27

输出
复制

3

示例2
输入
复制

8 8
9
19
28
36
45
55
66
78

输出
复制

6

示例3
输入
复制

13 7
8
8
9
16
17
17
18
21
23
24
24
26
30

输出
复制

4

备注:

In the first sample, the optimal route is 0  →  10 (+1 gem)  →  19  → 
27 (+2 gems)  → …

In the second sample, the optimal route is 0  →  8  →  15  →  21 →  28
(+1 gem)  →  36 (+1 gem)  →  45 (+1 gem)  →  55 (+1 gem)  →  66 (+1
gem)  →  78 (+1 gem)  → …

In the third sample, the optimal route is 0  →  7  →  13  →  18 (+1
gem)  →  24 (+2 gems)  →  30 (+1 gem)  → …

题意:

一维坐标共有30001个,坐标从0~30000,其中有n个坐标有宝座,起始点为0,给出第一步跳跃距离d,之后每一步可以从上一步x的基础上选择x,x-1,x+1。
问最多能拿多少宝藏?

题解:

第一反应是dp
dp[i][j]表示到达第i个岛屿,跳的距离为j得到的最大宝藏数
从上一次状态之后,可以跳三种情况,j,j+1,j-1,由此可得
dp[i+j][j]=max(dp[i+j][j],dp[i][j]+c[i+j])
dp[i+j+1][j+1]=max(dp[i+j+1][j+1],dp[i][j]+c[i+j+1])
dp[i+j-1][j-1] = max(dp[i+j-1][j-1], dp[i][j] + c[i+j-1])
我们将上面三个式子可以整合在一起:
dp[i][j]=max(dp[i][j],dp[next][j+k]+gem[i])
k的范围是-1~1
next=i -( j + d - 250 )

第一维数组开30000
第二维不能再开这么大,
我们算一算最大步长为1+2+3+…a+250 > 30000,所以最大也就是从第一次d的基础上上下浮动250,所以开500+够用
我们规定 j=250 时表示和d相等,每次可以跳d,d-1,d+1,而下下次又是再上次基础上加减1和不变,所以( j -250 )+d表示当前跳跃的距离,i-(j-250)-d表示上一次的位置

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=30013;
int gem[maxn];
int dp[maxn][520];
int main()
{int n,d;cin>>n>>d;int sum=0;for(int i=1;i<=n;i++){int x;cin>>x;gem[x]++;//记录宝藏坐标数量 } memset(dp,-1,sizeof(dp));dp[d][250]=gem[d];//相当于把250当做0步//每次移动就是250上下浮动 for(int i=d;i<=30000;i++)//i表示当前距离 {for(int j=1;j<=500;j++){int jump=(j+d-250);//表示跳的距离 int next=i-jump;//表示上一次的位置 if(next<0||next>=i)continue;//不往回跳 //上一次的位置一定在当前位置之前,否则成了向后跳for(int k=-1;k<=1;k++){if(j+k>0&&dp[next][j+k]!=-1)dp[i][j]=max(dp[i][j],dp[next][j+k]+gem[i]);//转移方程 }sum=max(sum,dp[i][j]);}}cout<<sum<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Core中利用TPL(任务并行库)构建Pipeline处理Dataflow

在学习的过程中&#xff0c;看一些一线的技术文档很吃力&#xff0c;而且考虑到国内那些技术牛人英语都不差的&#xff0c;要向他们看齐&#xff0c;所以每天下班都在疯狂地背单词&#xff0c;博客有些日子没有更新了&#xff0c;见谅见谅 什么是TPL?Task Parallel Library (T…

AT3950-[AGC022E]Median Replace【贪心,dp】

正题 题目链接:https://www.luogu.com.cn/problem/AT3950 题目大意 一个包含?,0,1?,0,1?,0,1的长度为奇数的序列&#xff0c;把???替换为0/10/10/1。每次可以选择三个数变成它们的中位数&#xff0c;求有多少种替换方案使得能够把序列最终变为一个111。 1≤∣S∣≤3105…

【excrt】屠龙勇士(luogu 4774)

正题 luogu 4774 题目大意 有n条龙&#xff0c;第i条血量为aia_iai​&#xff0c;回血量为bib_ibi​&#xff0c;杀死后掉落伤害为DiD_iDi​的刀&#xff0c;初始有若干刀 杀第i条龙要用现有伤害比aia_iai​小的刀中伤害最大的&#xff08;如果没有就用伤害最小的&#xff0…

牛客练习赛 60(待补E-长链剖分或者dsu)

A.大吉大利 位运算有独立性&#xff0c;按位计算对答案的贡献即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef uns…

.NET Core Agent

熟悉java的朋友肯定知道java agent&#xff0c;当我看到java agent时我很是羡慕&#xff0c;我当时就想.net是否也有类似的功能&#xff0c;于是就搜索各种资料&#xff0c;结果让人很失望。当时根据 https://github.com/OpenSkywalking/skywalking-netcore 找到这个 https://d…

【每日一题】8月14日题目精讲 [SCOI2010]游戏

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 lxhgww最近迷上了一款游戏&#xff0c;在游戏里&#xff0c;他拥有很多的装备&#x…

AT3957-[AGC023F]01 on Tree【贪心,堆】

正题 题目链接:https://www.luogu.com.cn/problem/AT3957 题目大意 nnn个节点的一棵树&#xff0c;每个节点有0/10/10/1。每次删除一个根节点&#xff0c;然后把该节点的值填入序列&#xff0c;求最终序列的最小逆序对数量。 n≤2105n\leq 2\times 10^5n≤2105 解题思路 考虑…

【状压DP】吃货JYY(luogu 6085)

正题 luogu 6085 题目大意 给你一个无向图&#xff0c;其中有一些边是必须走的&#xff0c;问你从1开始走&#xff0c;经过所有必须走的边&#xff0c;然后回到1的最短路径 解题思路 n很小&#xff0c;可以先用Floyd跑出两个点之间的最短路 然后状压DP&#xff0c;每个点存…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

在上文中我介绍了ASP.NET Core应用程序容器化时需要注意的几个问题&#xff0c;并给出了一个案例应用程序&#xff1a;tasklist。今天接着上文的内容&#xff0c;继续了解一下如何使用Azure DevOps进行ASP.NET Core应用程序的持续集成。为了便于讨论&#xff0c;本文会将持续集…

Codeforces Round #672 (Div. 2)

A - Cubes Sorting 冒泡排序交换次数等于逆序对数&#xff0c;严格降序需要交换n(n−1)2\frac{n(n-1)}{2}2n(n−1)​次才能升序排列&#xff0c;由此只需要判断原数组是否严格降序即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize…

P6134-[JSOI2015]最小表示【bitset,拓扑排序】

正题 题目链接:https://www.luogu.com.cn/problem/P6134 题目大意 给出一张nnn个点mmm条边的DAGDAGDAG。求联通情况不变的情况下最多删除几条边。 1≤n≤3104,0≤M≤1051\leq n\leq 3\times 10^4,0\leq M\leq 10^51≤n≤3104,0≤M≤105 解题思路 拓扑排序后&#xff0c;如果…

【每日一题】8月17日题目精讲-[SCOI2009]生日礼物

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 小西有一条很长的彩带&#xff0c;彩带上挂着各式各样的彩珠。已知彩珠有N个&#xff…

纪中A组模拟赛总结(2021.7.21)

成绩 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4383838lyflyflyf393939363636000000333总结 T1发现数据很小可以直接暴力&#xff0c;就暴力求出所有方案数&#xff0c;然后堆排了一下 然后看到T2&#xff0c;发现不会 看着T3以为就是两种状态的最短…

Followme Devops step by step

接着上次分享的devops历程[Followme Devops实践之路], 大家希望能够出一个step by step手册, 那今天我就来和手把手来一起搭建这么一套环境, 演示整个过程!实验环境需要准备docker /docker compose建议大家使用国外的vps学习, 不需要考虑网络/gwf的问题/方便(本demo搭建在linod…

Codeforces Round #673 (Div. 2)——待补 E

由于开学了&#xff0c;一般晚上就不打cf了&#xff08;太晚了&#xff0c;寝室不太适合打&#xff09;&#xff0c;而且赛后也懒得vp&#xff0c;有时候会在图书馆口胡题目&#xff0c;然后回寝室补一补&#xff0c;不过我也写得太久了吧&#xff0c;很多细节疯狂wa A - Copy…

【每日一题】8月25日题目精讲 XOR-pyramid

文章目录题目描述&#xff1a;题解&#xff1a;代码&#xff1a;题目描述&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/problem/112798 来源&#xff1a;牛客网 输入描述: 输出描述: Print q lines — the answers for the queries. 示例1 输入 复制 3 8 4 1…

AT3611-Tree MST【点分治,最小生成树】

正题 题目链接:https://www.luogu.com.cn/problem/AT3611 题目大意 给出nnn个点的一棵树。 现在有一张完全图&#xff0c;两个点之间的边权为wxwydis(x,y)w_xw_ydis(x,y)wx​wy​dis(x,y)&#xff08;disdisdis表示树上距离&#xff09; 求这张完全图的最小生成树。 2≤n≤…

【LCT】大融合(luogu 4219)

正题 luogu 4219 题目大意 给你一棵树&#xff08;初始都无连边&#xff09;&#xff0c;让你进行以下操作&#xff1a; 1.连接两个点 2.查询一条边被多少条路径经过 解题思路 因为有边的修改&#xff0c;可以用LCT来维护这棵树 一条边的经过次数&#xff0c;就相当于连接…

申请Office 365一年免费的开发者账号攻略(2018年10月份版本)

要进行Office 365开发&#xff0c;当然需要有完整的Office 365环境才可以。为了便于广大开发人员快速地启动这项工作&#xff0c;微软官方给所有开发人员提供了免费的一年开发者账号那么如何申请Office 365一年免费的开发者账号呢&#xff1f;网上已经有一些攻略了&#xff0c;…

Codeforces Round #674 (Div. 3)

突如其来的div3&#xff0c;赛后打了一下。 A - Floor Number 数学题答案是1⌈n−2x⌉1\lceil \frac{n-2}{x} \rceil1⌈xn−2​⌉ #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm&…