题目链接

题目

见链接。

题解

知识点:线性dp。

常规的状态 \(dp[i][j]\) 表示为到第 \(i\) 个岛上一步走了 \(j\) 能得到宝藏的最大值,会炸空间。注意到步数是就算从 \(1\) 开始走到结束,最多不会超过初始步数 \(d\) 的 \(\pm 250\) 。因此,改变状态为到第 \(i\) 个岛上一步的关于 \(d\) 的偏移量为 \(j+300\) (负数不能表示,所以整体加 \(300\))。

遍历 \(j\) 时要注意边界条件,如步数 \(d+j-300 \geq 1\) ,上一次的岛屿编号 \(i-(d+j-300) \geq 1\) 。

初始位置的宝藏要初始化进去,其他应该是负无穷。

答案不一定在最后一个岛上,因为可能跳不到,所以考虑在过程中取最大值即可。

时间复杂度 \(O(30000*600)\)

空间复杂度 \(O(30000*600)\)

代码

#include <bits/stdc++.h>

using namespace std;

int dp[30007][607];
int p[30007]; int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, d;
cin >> n >> d;
for (int i = 1, tmp;i <= n;i++) cin >> tmp, p[tmp]++;
memset(dp, -0x3f, sizeof(dp));
dp[d][300] = p[d];
int ans = p[d];
for (int i = d + 1;i <= 30000;i++) {
for (int j = 10;j <= 590;j++) {///偏移量不超过±250
if (1 <= d + j - 300 && i - (d + j - 300) >= 1) {///步数不小于1,岛屿不小于1
dp[i][j] = max({
dp[i - (d + j - 300)][j - 1],
dp[i - (d + j - 300)][j],
dp[i - (d + j - 300)][j + 1]
}) + p[i];
}
ans = max(dp[i][j], ans);///有可能跳不到30000而直接超过30000,但一定能经过最大值路径上的岛屿,每次保存最大值即可
///因为终点未知,也可以考虑逆推,因为起点固定
}
}
cout << ans << '\n';
return 0;
}

CF505C Mr. Kitayuta, the Treasure Hunter的更多相关文章

  1. codeforces 505C C. Mr. Kitayuta, the Treasure Hunter(dp)

    题目链接: C. Mr. Kitayuta, the Treasure Hunter time limit per test 1 second memory limit per test 256 me ...

  2. Codefores 506A Mr. Kitayuta, the Treasure Hunter( DP && dfs )

    A. Mr. Kitayuta, the Treasure Hunter time limit per test 1 second memory limit per test 256 megabyte ...

  3. [Codeforces 505C]Mr. Kitayuta, the Treasure Hunter

    Description The Shuseki Islands are an archipelago of 30001 small islands in the Yutampo Sea. The is ...

  4. 【codeforces 505C】Mr.Kitayuta,the Treasure Hunter

    [题目链接]:http://codeforces.com/problemset/problem/505/C [题意] 一开始你跳一步长度为d; 之后你每步能跳d-1,d,d+1这3种步数; 然后在路上 ...

  5. Codeforces Round #286 Div.1 A Mr. Kitayuta, the Treasure Hunter --DP

    题意:0~30000有30001个地方,每个地方有一个或多个金币,第一步走到了d,步长为d,以后走的步长可以是上次步长+1,-1或不变,走到某个地方可以收集那个地方的财富,现在问走出去(>300 ...

  6. codeforces 505C Mr. Kitayuta, the Treasure Hunter(dp)

    题意:有30001个岛,在一条线上,从左到右编号一次为0到30000.某些岛屿上有些宝石.初始的时候有个人在岛屿0,他将跳到岛屿d,他跳跃的距离为d.如果当前他跳跃的距离为L,他下一次跳跃的距离只能为 ...

  7. [Codeforces Round#286] A.Mr. Kitayuta, the Treasure Hunter 【Normal DP..】

    题目链接:CF#286 - A 这场CF就这样爆零了...我真是太蒟蒻了... 题目分析 比赛的时候看到A题就发现不会,之后一直也没想出来,于是就弃了,还好不提交也不掉Rating... 比赛后看评论 ...

  8. 505C Mr. Kitayuta, the Treasure Hunter

    传送门 题目大意 一共有30000个位置,从第0个位置开始走,第一次走k步,对于每一次走步,可以走上一次的ki+1 ,ki ,ki-1步数(必须大于等于1),每个岛上有value,求最大能得到的val ...

  9. Codeforces 505C Mr. Kitayuta, the Treasure Hunter:dp【考虑可用范围】

    题目链接:http://codeforces.com/problemset/problem/505/C 题意: 有n个宝石,分别在位置p[i].(1 <= n,p[i] <= 30000) ...

  10. cf 506 A. Mr. Kitayuta, the Treasure Hunter

    不知道这个sb题怎么做错了.. /*#include <bits/stdc++.h> #define LL long long using namespace std; inline in ...

随机推荐

  1. Skywalking 的使用

    本文为博主原创,未经允许不得转载: 官网:http://skywalking.apache.org/下载:http://skywalking.apache.org/downloads/Github:h ...

  2. .NET开源的简单、快速、强大的前后端分离后台权限管理系统

    前言 今天分享一款前端基于Vue3,后端基于.NET8开源的免费(MIT license).简单.快速.强大的前后端分离后台权限管理系统:中台Admin(Admin.Core). 项目官方介绍 中台A ...

  3. Mygin实现动态路由

    本篇是Mygin的第四篇 目的 使用 Trie 树实现动态路由解析. 参数绑定 前缀树 本篇比前几篇要复杂一点,原来的路由是用map实现,索引非常高效,但是有一个弊端,键值对的存储的方式,只能用来索引 ...

  4. [转帖]JDK8使用G1 垃圾回收器能解决大问题吗?

    https://zhuanlan.zhihu.com/p/458098236 G1 垃圾回收器真的不行吗? 本文想突出两个问题: 解决问题的思路:从最原始的角度去思考,问题的本身是因为缓存数据导致的G ...

  5. [转帖]3--二进制安装k8s

    https://www.cnblogs.com/caodan01/p/15104491.html 目录 一.节点规划 二.插件规划 三.系统优化(所有master节点) 1.关闭swap分区 2.关闭 ...

  6. [转帖]tidb-系统内核调优及对比

    一.背景 验证系统调优对性能的影响,用sysbench做了一些简单的测试,具体调整方法可见官方文档 二.特殊说明 1.透明大页查看 # 查看透明大页是否开启,[]在always处表示开启,[]在nev ...

  7. [转帖]Linux遇到一个内存过高的报警——释放buff/cache

    前些天一直受到内存报警,过一段时间就会恢复.由于开发工作有些多,就一直没理它,但是最近几天开始有些频繁了.虽然不影响业务,但是天天报警,还是让人提心吊胆的.因此就抽了一个上午的时间去解决一下这个问题. ...

  8. sed 反斜线换成正斜线

    命令为: sed -i "s:\\\:\/:g" yourfiles

  9. React Hooks 指北

    前言 这篇文章旨在总结 React Hooks 的使用技巧以及在使用过程中需要注意的问题,其中会附加一些问题产生的原因以及解决方式.但是请注意,文章中所给出的解决方式并不一定完全适用,解决问题的方案有 ...

  10. vue mixin混入 全局混入 局部混入

    <div id="app"> --{{nameName}} </div> // 全局混入 不需要注册 var m1 = Vue.mixin({ data() ...