博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod1455(dp)
阅读量:4984 次
发布时间:2019-06-12

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

题目链接:

 

题意: 中文题诶~

 

思路: dp

1 <= n, d <= 3e4, 直接用 dp[i][j] 存储从上一个岛屿经过 距离 j 到达岛屿 i 的最大收获显然是不行的.  可以令 j' 为当前移动距离  j 与 d 的差值, 即 dp[i][j'] 存储从上一个岛屿经过距离 |j' + d| 到达岛屿 i 最大收获. 因为 d 每次只能加或者减 1, 所以偏移量 j' 的范围在 -250 ~ 250 之间. 可以给所有偏移量加 300 使其全部变成正数, 后面计算时再减回去即可. 那么动态转移方程为:

  int next = i + j + d - 300;

  if(next < MAXN && next - i) dp[next][j] = max(dp[next][j], dp[i][j] + vis[next]);

  if(next + 1 < MAXN && next - i + 1) dp[next + 1][j + 1] = max(dp[next + 1][j + 1], dp[i][j] + vis[next + 1]);

  if(next - 1 >= 1 && next < MAXN && next - i - 1 >= 1) dp[next - 1][j - 1] = max(dp[next - 1][j - 1], dp[i][j] + vis[next - 1]);

 

代码:

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 const int MAXN = 3e4 + 1; 7 int dp[MAXN][610], vis[MAXN];//dp[i][j]存储从上一个岛屿经过距离|j+d|到达岛屿i最大收获,其中j为当前移动步数与d的差值 8 9 int main(void){10 int n, d, x;11 memset(dp, -1, sizeof(dp));12 scanf("%d%d", &n, &d);13 for(int i = 0; i < n; i++){14 scanf("%d", &x);15 vis[x]++;16 }17 dp[d][300] = vis[d];//所有偏移量+300,但是其他dp值为0,所以不必额外处理18 int ans = vis[d];19 for(int i = 1; i < MAXN; i++){20 for(int j = 0; j < 600; j++){21 if(dp[i][j] == -1) continue;22 int next = i + j + d - 300;//这里的j表示+300后的偏移量,所以要减回去23 if(next < MAXN && next - i){24 dp[next][j] = max(dp[next][j], dp[i][j] + vis[next]);25 ans = max(ans, dp[next][j]);26 }27 if(next + 1 < MAXN && next - i + 1){28 dp[next + 1][j + 1] = max(dp[next + 1][j + 1], dp[i][j] + vis[next + 1]);29 ans = max(ans, dp[next + 1][j + 1]);30 }31 if(next - 1 >= 1 && next < MAXN && next - i - 1 >= 1){32 dp[next - 1][j - 1] = max(dp[next - 1][j - 1], dp[i][j] + vis[next - 1]);33 ans = max(ans, dp[next - 1][j - 1]);34 }35 }36 }37 cout << ans << endl;38 return 0;39 }
View Code

 

转载于:https://www.cnblogs.com/geloutingyu/p/7650365.html

你可能感兴趣的文章
第一个spring boot 程序
查看>>
Seasar2 DI注入的底层实现
查看>>
eclipse创建maven web项目
查看>>
对象属性查找顺序
查看>>
Hnu 12505 字符串处理
查看>>
MVC - Model - Controller - View
查看>>
Android中的进程与线程
查看>>
QT之sqlite连接
查看>>
Microsoft Baseline Configuration Analyzer 2.0(MBCA) For Windows Server 2012
查看>>
SU Demos 03T-F Analysis-03Suphasevel
查看>>
继承(day09)
查看>>
javaWeb学习之tomcat服务器
查看>>
Sass入门——基本特性-基础
查看>>
c++ 一个构造函数 调用 另一个 构造函数
查看>>
Vue 仿QQ左滑删除组件
查看>>
分割线
查看>>
xls的读写
查看>>
用函数创建子进程
查看>>
1- vue django restful framework 打造生鲜超市
查看>>
SQL SERVER定时任务执行跟踪--供远程查看 [原创]
查看>>