DP基础吧。A掉还是挺爽的。就是考虑在两端只能是从前一秒的内部一米或原来的点来进行,但是在5秒以内可到达点是逐渐外扩的,并不是[0,10],所以就特殊考虑了一下。后面两端是0和10,中间的点可以从上一秒的左边/本身/右边过来,保证每次最优这样下来就好了。

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stack>
  5. #include <queue>
  6. #include <map>
  7. #include <set>
  8. #include <vector>
  9. #include <math.h>
  10. #include <algorithm>
  11. using namespace std;
  12. #define LL long long
  13. #define INF 0x3f3f3f3f
  14. const double pi = acos(-1.0);
  15. const int mod =9973;
  16. const int N = 1e5+10;
  17. int n;
  18. int dp[5][20];
  19. int a[N][20];
  20. int main()
  21. {
  22. int k,x,y,T;
  23. while(~scanf("%d",&n)&&n)
  24. {
  25. memset(a,0,sizeof(a));
  26. memset(dp,0,sizeof(dp));
  27. T=0;
  28. for(int i=0;i<n;i++)
  29. {
  30. scanf("%d%d",&x,&y);
  31. a[y][x]++;
  32. T=max(T,y);
  33. }
  34. /*for(int i=1;i<=T;i++)
  35. {
  36. for(int j=0;j<=10;j++)
  37. printf("%d ",a[i][j]);
  38. puts("");
  39. }
  40. puts("");
  41. */
  42. k=0;
  43. dp[k][4]=a[1][4];
  44. dp[k][5]=a[1][5];
  45. dp[k][6]=a[1][6];
  46. /* for(int i=0;i<=10;i++)
  47. printf("%d ",dp[k][i]);
  48. puts("");*/
  49. if(T<=5)
  50. {
  51. for(int i=2;i<=T;i++)
  52. {
  53. k=1-k;
  54. for(int j=(5-i);j<=(5+i);j++)
  55. {
  56. if(j==(5-i))
  57. dp[k][j]=a[i][j]+dp[1-k][j+1];
  58. else if(j==(5+i))
  59. dp[k][j]=a[i][j]+dp[1-k][j-1];
  60. else
  61. dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
  62. }
  63. }
  64. int ans=0;
  65. for(int i=0;i<=10;i++)
  66. ans=max(ans,dp[k][i]);
  67. printf("%d\n",ans);
  68. continue;
  69. }
  70. for(int i=2;i<=5;i++)
  71. {
  72. k=1-k;
  73. for(int j=(5-i);j<=(5+i);j++)
  74. {
  75. if(j==(5-i))
  76. dp[k][j]=a[i][j]+dp[1-k][j+1];
  77. else if(j==(5+i))
  78. dp[k][j]=a[i][j]+dp[1-k][j-1];
  79. else
  80. dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
  81. }
  82. }
  83. for(int i=6;i<=T;i++)
  84. {
  85. k=1-k;
  86. for(int j=0;j<=10;j++)
  87. {
  88. if(j==0)
  89. dp[k][j]=a[i][j]+max(dp[1-k][j],dp[1-k][j+1]);
  90. else if(j==10)
  91. dp[k][j]=a[i][j]+max(dp[1-k][j],dp[1-k][j-1]);
  92. else
  93. dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
  94. }
  95. }
  96. int ans=0;
  97. for(int i=0;i<=10;i++)
  98. ans=max(ans,dp[k][i]);
  99. printf("%d\n",ans);
  100. }
  101. return 0;
  102. }

后来我又写了一发发现其实没有必要考虑前五秒的路线,反正我前一状态没有走过就是0,那么就算本来前五秒过程中走不到的地方,我也当成走到了,反正前一状态就是0;

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <algorithm>
  6. #include <math.h>
  7. #include <queue>
  8. #include <stack>
  9. #include <map>
  10. using namespace std;
  11. #define INF 0x3f3f3f3f
  12. #define pi acos(-1.0)
  13. #define MAX 100010
  14. #define mod 9973
  15. #define LL long long
  16. const int N=1e5+10;
  17. int a[N][20];
  18. int dp[5][20];
  19. int main()
  20. {
  21. int n,x,y,k;
  22. while(~scanf("%d",&n)&&n){
  23. memset(a,0,sizeof(a));
  24. memset(dp,0,sizeof(dp));
  25. int T;
  26. T=0;
  27. for(int i=1;i<=n;i++)
  28. {
  29. scanf("%d%d",&x,&y);
  30. a[y][x]++;
  31. T=max(T,y);
  32. }
  33. k=1;
  34. dp[k][5]=a[1][5];
  35. dp[k][4]=a[1][4];
  36. dp[k][6]=a[1][6];
  37. for(int i=2;i<=T;i++)
  38. {
  39. k=1-k;
  40. for(int j=10;j>=0;j--){
  41. if(j==0){
  42. dp[k][j]=a[i][j]+max(dp[1-k][j+1],dp[1-k][j]);
  43. }
  44. else if(j==10){
  45. dp[k][j]=a[i][j]+max(dp[1-k][j-1],dp[1-k][j]);
  46. }
  47. else
  48. dp[k][j]=a[i][j]+max(dp[1-k][j-1],max(dp[1-k][j+1],dp[1-k][j]));
  49. }
  50. }
  51. int ans=dp[k][0];
  52. for(int i=0;i<=10;i++)
  53. {
  54. ans=max(ans,dp[k][i]);
  55. }
  56. cout<<ans<<endl;
  57. }
  58. return 0;
  59. }

hdoj1176【DP】的更多相关文章

  1. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  2. HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】

    HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...

  3. HDOJ 1501 Zipper 【DP】【DFS+剪枝】

    HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...

  4. HDOJ 1257 最少拦截系统 【DP】

    HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

  5. HDOJ 1159 Common Subsequence【DP】

    HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  6. HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】

    HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  7. POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】

    POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...

  8. HackerRank - common-child【DP】

    HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...

  9. LeetCode:零钱兑换【322】【DP】

    LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...

随机推荐

  1. 深入研究Clang(五) Clang Lexer代码阅读笔记之Lexer

    作者:史宁宁(snsn1984) Clang的Lexer(词法分析器)的源代码的主要位置例如以下: clang/lib/Lex    这里是基本的Lexer的代码: clang/include/cla ...

  2. hdu 4707 Pet(DFS &amp;&amp; 邻接表)

    Pet Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. css 滤镜之AlphaImageLoader

      CreateTime--2017年12月25日17:05:37 Author:Marydon ie滤镜特效之AlphaImageLoader 作用: 用于设置背景图片特效样式 使用条件: IE8及 ...

  4. MySQL Community Server 5.6和MySQL Installer 5.6

    mysql community server是mysql社区版的数据库服务器.即数据库软件. mysql installer是mysql软件的安装管理器,能够通过installer来选择安装mysql ...

  5. 漫谈程序猿系列:无BUG不生活

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  6. spring test---測试SpringMvc初识

    如今越来越多人使用SpringMvc来开发系统,在开发中可定须要对后台url地址请求測试,而且返回预期的结果! Spring提供的測试类MockMvc来进行url地址请求測试,使用方方式: packa ...

  7. hadoop rsync

    1 rsync用来同步配置文件 rsync用来同步两个文件夹,它拷贝的是二者的差异,因此速度很快.在hadoop脚本中,rsync用来同步配置文件. 2 HADOOP_SLAVE_SLEEP的用途 大 ...

  8. 用WaveX实现音频文件的录音

    原文地址:https://blog.csdn.net/gongluck93/article/details/53096013 1.WaveInOpen waveInOpen MMRESULT wave ...

  9. react Native 踩坑记录

    应用 1 安卓打包 经验 解决方案 ,官方 解决方案 2 调试 用 React-Native-Debugger 教程 3 微信分享和登录 使用 react-native-wechat    地址 设计 ...

  10. boogo08---中间件

    package main //中间件1:只允许特定host请求过来 import ( "fmt" "net/http" ) //SingleHost是一个中间件 ...