题目链接

感觉这道题我看了很多天,胡思乱想啊,一开始觉得记忆化搜索会可能T啊,,可能出题人的数据卡的好就稳T了的感觉。。后来想了想,好像离散化一下,记一下位置之后再记忆化搜索就应该稳了吧。。(好像直接搜也不会T的,,??)

  1. #include <set>
  2. #include <map>
  3. #include <queue>
  4. #include <stack>
  5. #include <math.h>
  6. #include <bitset>
  7. #include <vector>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <iostream>
  12. #include <algorithm>
  13. #define MAXN 1010100
  14. #define LL long long
  15. #define fi first
  16. #define se second
  17. #define mp make_pair
  18. #define pb push_back
  19. #define ll __int64
  20. #define INF 0x7fffffff
  21. #define cs(s) freopen(s,"r",stdin)
  22. #define mem(x) memset(x,0,sizeof(x))
  23. #define PI acos(-1)
  24. #define eps 1e-10
  25. using namespace std;
  26. int gcd(int a,int b){return b?gcd(b,a%b):a;}
  27. int lcm(int a,int b){return a/gcd(a,b)*b;}
  28. LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
  29. //head
  30. const int maxn=1e5+1;
  31. int dp[maxn][3],ans;
  32. int a[maxn],b[maxn],pos[maxn],n;
  33. int dfs(int now,int sta){
  34. if(now==n)return dp[now][sta]=1;
  35. if(dp[now][sta]!=-1)return dp[now][sta];
  36. if(sta==0){
  37. int cnt=0;
  38. while(pos[a[now]+cnt]<=now&&a[now]+cnt+1<=n)cnt++;
  39. if(pos[a[now]+cnt]<=now)return dp[now][sta]=0;
  40. return dp[now][sta]=dfs(pos[a[now]+cnt],1);
  41. }else {
  42. int cnt=0;
  43. while(pos[a[now]-cnt]<=now&&a[now]-cnt-1>=1)cnt++;
  44. if(pos[a[now]-cnt]<=now)return dp[now][sta]=0;
  45. return dp[now][sta]=dfs(pos[a[now]-cnt],0);
  46. }
  47. }
  48. int main(){
  49. ios::sync_with_stdio(false);
  50. cin>>n;
  51. for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
  52. sort(b+1,b+1+n);
  53. int cnt=unique(b+1,b+1+n)-b-1;
  54. for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+1+cnt,a[i])-b,pos[a[i]]=i;
  55. memset(dp,-1,sizeof(dp));
  56. for(int i=1;i<=n;i++)if(dfs(i,0))ans++;
  57. cout<<ans<<endl;
  58. return 0;
  59. }

第二天 ,写了一个非递归的版本。。。快一点,大致都差不多的。

dp[i][0]=dp[pos][1],(a[i]<a[pos],且a[pos]>a[p] {p!=pos且p>i且a[p]<a[i]}。

dp[i][1]=dp[pos][0],(a[i]>a[pos],且a[pos]<a[p] {p!=pos且p>i且a[p]>a[i]}。

  1. #include <set>
  2. #include <map>
  3. #include <queue>
  4. #include <stack>
  5. #include <math.h>
  6. #include <bitset>
  7. #include <vector>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <iostream>
  12. #include <algorithm>
  13. #define MAXN 1010100
  14. #define LL long long
  15. #define fi first
  16. #define se second
  17. #define mp make_pair
  18. #define pb push_back
  19. #define ll __int64
  20. #define INF 0x7fffffff
  21. #define cs(s) freopen(s,"r",stdin)
  22. #define mem(x) memset(x,0,sizeof(x))
  23. #define PI acos(-1)
  24. #define eps 1e-10
  25. using namespace std;
  26. int gcd(int a,int b){return b?gcd(b,a%b):a;}
  27. int lcm(int a,int b){return a/gcd(a,b)*b;}
  28. LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
  29. //head
  30. const int maxn=1e5+1;
  31. int dp[maxn][3],ans;
  32. int a[maxn],b[maxn],pos[maxn],n;
  33. int main(){
  34. ios::sync_with_stdio(false);
  35. cin>>n;
  36. for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
  37. sort(b+1,b+1+n);
  38. int cnt=unique(b+1,b+1+n)-b-1;
  39. for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+1+cnt,a[i])-b,pos[a[i]]=i;
  40. dp[n][0]=dp[n][1]=1;
  41. for(int i=n-1;i>=1;i--){
  42. int cnt=0;
  43. while(pos[a[i]+cnt]<=i&&a[i]+cnt+1<=n)cnt++;
  44. if(pos[a[i]+cnt]<=i)dp[i][1]=0;
  45. else dp[i][1]=dp[pos[a[i]+cnt]][0];
  46. cnt=0;
  47. while(pos[a[i]-cnt]<=i&&a[i]-cnt-1>=1)cnt++;
  48. if(pos[a[i]-cnt]<=i)dp[i][0]=0;
  49. else dp[i][0]=dp[pos[a[i]-cnt]][1];
  50. }
  51. for(int i=1;i<=n;i++)if(dp[i][1]||i==n)ans++;
  52. cout<<ans<<endl;
  53. return 0;
  54. }

EcustOJ P109跳一跳(离散化+dp)的更多相关文章

  1. 【loj6342】跳一跳 期望dp

    题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...

  2. loj #6342. 跳一跳 期望dp

    令 $f[i]$ 表示已经到达 $i$ 点,为了到大 $n$ 点还期望需要的时间,随便转移一下就行. 由于本题卡空间,要记得开滚动数组. #include <bits/stdc++.h> ...

  3. 挑战App Store,微信通过“跳一跳”秀了一下“小程序”的肌肉

    2017年即将结束的时候,微信放了一个大招.随着最新的微信v6.6.1版本更新,基于小程序的"小游戏"板块正式上线.微信上首发的这款"小游戏"叫"跳一 ...

  4. .NET开发一个微信跳一跳辅助程序

    昨天微信更新了,出现了一个小游戏"跳一跳",玩了一下 赶紧还蛮有意思的 但纯粹是拼手感的,玩了好久,终于搞了个135分拿了个第一名,没想到过一会就被朋友刷下去了,最高的也就200来 ...

  5. C#又能出来装个B了。一步一步微信跳一跳自动外挂

    PS:语言只是载体.思维逻辑才是王道 前天看见了个python的脚本.于是装python.配置环境变量.装pip.折腾了一上午,最终装逼失败. 于是进入博客园,顶部有篇文章吸引了我 .NET开发一个微 ...

  6. 用C#实现微信“跳一跳”小游戏的自动跳跃助手

    一.前言: 前段时间微信更新了新版本后,带来的一款H5小游戏“跳一跳”在各朋友圈里又火了起来,类似以前的“打飞机”游戏,这游戏玩法简单,但加上了积分排名功能后,却成了“装逼”的地方,于是很多人花钱花时 ...

  7. Adb+.net 实现微信跳一跳自动化

    第一次用adb,一开始只是想试试看能不能解析出,没有看网上的现有解析方式. 需要安卓机开启usb 调试+电脑运行.打开跳一跳的界面 点击程序 [开始]按钮即可开始,别的按钮都是调试用的 主要流程是用a ...

  8. 微信跳一跳Python

    微信最新的小程序里面出了个叫“跳一跳”的小游戏,大神们也通过Python实现了自动玩游戏具体代码 如下: Github地址: https://github.com/wangshub/wechat_ju ...

  9. 微信跳一跳辅助自动跳Python

    一.说明 此代码借鉴github一位大神所写,已经做了简化合并处理,如果能成功连上手机并运行,可以实现程序自动玩游戏,刷个1000+的分数轻轻松松 github源码地址 https://github. ...

随机推荐

  1. 模拟赛 yjqb

    对于这种“不能交叉”的条件,不是很好处理.那么就考虑一下dp dp[i][j]表示,考虑A中用前i个,考虑连接B中用前j个,最大匹配.(类似LCS的DP) 转移:dp[i][j]=max(dp[i][ ...

  2. MVC之 自定义过滤器(ActionFilterAttribute)

    一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttribute类的方法签名. //表示所有操作 ...

  3. 腾讯云centos安装python3.6和pip

    不知道腾讯云的centos和阿里云的centos一不一样,反正两个云平台的Ubuntu系统是不一样的,照着同样的教程敲,往往掉坑里. 安装一些centos依赖库: 这一步很关键,很多报错往往都因为少了 ...

  4. error2019-01-17 宏STDOUT_FILENO

    STDOUT_FILENO定义在<unistd.h> EXIT_SUCCESS <stdlib.h> 1.fatal error: sys/capability.h: No s ...

  5. 配置ssl

    1.配置 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000&q ...

  6. (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  7. php php-fpm安装 nginx配置php

    centos 6.2 linux下安装php5.6.6源码 PHP在 5.3.3 之后已经把php-fpm并入到php的核心代码中了. 所以php-fpm不需要单独的下载安装.要想php支持php-f ...

  8. POJ3662 SPFA//二分 + 双端队列最短路

    https://cn.vjudge.net/problem/12427/origin 题意:求1到N第K + 1大条边权最小的路径 首先想到dp递推,dp[x][y]表示到x这个点经过y条免费边的最小 ...

  9. kubernetes1.5.2 DNS

    Cluster DNS主要包含如下几项: SkyDNS :提供DNS解析服务. Etcd :用于DNS的存储. Kube2sky :监听Kubernetes,当有新的Service创建时,将其注册到e ...

  10. JDK1.5以后的版本特性

    一.JDK1.5新特性 1.泛型:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.可以在编译的时候就能 ...