博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 505C
阅读量:5154 次
发布时间:2019-06-13

本文共 1066 字,大约阅读时间需要 3 分钟。

题意:有n个宝藏分部在n个岛屿上,现在给出n个岛屿的位置,初始的时候你从0位置跳到位置为d的岛屿,往后每次跳跃的步长只能是上pre+1 pre pre-1 这3种(pre表示上一步的步长)

思路:dp+技巧优化空间

  dp式很容易想到,dp[i][j]表示当前在第i个岛屿,上一步跳的步长为j,这样就得开3e4*3e4的数组,显然要爆内存,但是推一下很容易知道,1+2+3+...+250>3e4,也就是说步长最多有250种,即第二维有效的只有500个,所以可以在这个地方对空间经行优化,第二维表示上一步跳了j+d-250步,因此第二维只需要存j即可,还有一个问题是边界一定要处理好,下一步的位置一定要比当前的位置大,因为步长一定是正数

AC代码:

#include "iostream"#include "string.h"#include "stack"#include "queue"#include "string"#include "vector"#include "set"#include "map"#include "algorithm"#include "stdio.h"#include "math.h"#pragma comment(linker, "/STACK:102400000,102400000")#define ll long long#define endl ("\n")#define bug(x) cout<
<<" "<<"UUUUU"<
>n>>d; for(int i=1; i<=n; ++i){ int x; cin>>x; v[x]++; } mem(dp,-1); dp[d][250]=v[d]; for(int i=d; i<=N; ++i){ for(int j=0; j<=500; ++j){ int nex=i+d+j-250; if(dp[i][j]==-1) continue; if(nex>i && nex
i && nex-1
i && nex-1

 

转载于:https://www.cnblogs.com/max88888888/p/7294507.html

你可能感兴趣的文章
Android统计绘图工具
查看>>
Isequal IsequalToString containsString hasPrefixd的区别
查看>>
【原】关于cuteftp连不上Linux虚拟机的问题
查看>>
大众点评cat系统的搭建笔记
查看>>
[svc]sort-uniq
查看>>
[svc]mysql备份恢复及常用命令
查看>>
mysql存储引擎之MyISAM 和 InnoDB的比较
查看>>
Mybatis学习总结(五)——动态sql
查看>>
文件读、写相关的常用方法
查看>>
C#时间问题
查看>>
使用JSONP 实现跨域通信
查看>>
服务端性能测试校准v1.2
查看>>
【JavaScript】离线应用与客户端存储
查看>>
2014.12.3 ---Thema:Node.js
查看>>
[转载]启示录:产品原则和产品评审团
查看>>
USACO Training3.3 A Game【区间Dp】 By cellur925
查看>>
修改默认input type=file 样式
查看>>
django 基础框架学习 (二)
查看>>
python学习之内存机制
查看>>
SQL思维导图总结
查看>>