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

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
const double pi = acos(-1.0); const int mod =9973; const int N = 1e5+10; int n;
int dp[5][20];
int a[N][20]; int main()
{
int k,x,y,T;
while(~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
T=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
a[y][x]++;
T=max(T,y);
} /*for(int i=1;i<=T;i++)
{
for(int j=0;j<=10;j++)
printf("%d ",a[i][j]);
puts("");
}
puts("");
*/ k=0;
dp[k][4]=a[1][4];
dp[k][5]=a[1][5];
dp[k][6]=a[1][6]; /* for(int i=0;i<=10;i++)
printf("%d ",dp[k][i]);
puts("");*/
if(T<=5)
{
for(int i=2;i<=T;i++)
{
k=1-k;
for(int j=(5-i);j<=(5+i);j++)
{
if(j==(5-i))
dp[k][j]=a[i][j]+dp[1-k][j+1];
else if(j==(5+i))
dp[k][j]=a[i][j]+dp[1-k][j-1];
else
dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
}
}
int ans=0;
for(int i=0;i<=10;i++)
ans=max(ans,dp[k][i]);
printf("%d\n",ans);
continue;
}
for(int i=2;i<=5;i++)
{
k=1-k;
for(int j=(5-i);j<=(5+i);j++)
{
if(j==(5-i))
dp[k][j]=a[i][j]+dp[1-k][j+1];
else if(j==(5+i))
dp[k][j]=a[i][j]+dp[1-k][j-1];
else
dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
}
}
for(int i=6;i<=T;i++)
{
k=1-k;
for(int j=0;j<=10;j++)
{
if(j==0)
dp[k][j]=a[i][j]+max(dp[1-k][j],dp[1-k][j+1]);
else if(j==10)
dp[k][j]=a[i][j]+max(dp[1-k][j],dp[1-k][j-1]);
else
dp[k][j]=max(dp[1-k][j],max(dp[1-k][j+1],dp[1-k][j-1]))+a[i][j];
} }
int ans=0;
for(int i=0;i<=10;i++)
ans=max(ans,dp[k][i]);
printf("%d\n",ans);
}
return 0;
}

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

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#include <queue>
#include <stack>
#include <map>
using namespace std;
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define MAX 100010
#define mod 9973
#define LL long long const int N=1e5+10; int a[N][20];
int dp[5][20]; int main()
{
int n,x,y,k;
while(~scanf("%d",&n)&&n){ memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp)); int T;
T=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
a[y][x]++;
T=max(T,y);
} k=1;
dp[k][5]=a[1][5];
dp[k][4]=a[1][4];
dp[k][6]=a[1][6]; for(int i=2;i<=T;i++)
{
k=1-k;
for(int j=10;j>=0;j--){
if(j==0){
dp[k][j]=a[i][j]+max(dp[1-k][j+1],dp[1-k][j]);
}
else if(j==10){
dp[k][j]=a[i][j]+max(dp[1-k][j-1],dp[1-k][j]);
}
else
dp[k][j]=a[i][j]+max(dp[1-k][j-1],max(dp[1-k][j+1],dp[1-k][j]));
}
} int ans=dp[k][0];
for(int i=0;i<=10;i++)
{
ans=max(ans,dp[k][i]);
}
cout<<ans<<endl;
}
return 0;
}

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. 几种自己主动运行js代码的方式

    近期在看jquery,发现他竟然能自己主动运行js代码,于是就查了下.收集了几种经常使用的实现方法 jquery的方法 使用场景:不论什么须要运行的js特效 $(document).ready(fun ...

  2. bsp开发之驱动开发

    驱动程序是可以管理虚拟设备或者物理设备,协议,服务等得软件模块,操作系统仅仅有通过驱动程序才干訪问硬件.针对windows ce开发设备驱动.就是通过platform builder创建一个新的平台, ...

  3. css 滤镜之AlphaImageLoader

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

  4. Linux环境下如何查找哪个线程使用CPU最长

    top -H -p pid 查看端口是否被占用: netstat -apn|grep 80

  5. device not managed by NetworkManager

    Bringing up interface eth0:Error:Connection activation failed:Device not managed by  NetworkManager ...

  6. delphi中的HOOK [转贴]

    按事件分类,有如下的几种常用类型的钩子: 1)键盘钩子可以监视各种键盘消息. 2)鼠标钩子可以监视各种鼠标消息. 3)外壳钩子可以监视各种Shell事件消息. 4)日志钩子可以记录从系统消息队列中取出 ...

  7. Handler有何作用?怎样使用?

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012974916/article/details/24580405 一  Handler作用和概念 ...

  8. caioj1462: 【EXKMP】回文串

    不得不说这是一道好题(前排膜拜灯教授),其实这道题如果不说是EXKMP,很容易就想到Manacher(好像也可以这样做) 回到这道题,这样只有一个字符串,还要求回文?立刻想到了将这个串和它的反串跑EX ...

  9. 多态、抽象类、接口、区别(java基础知识九)

    1.多态的概述以及代码体现 * A:多态概述 * 事物存在的多种形态 * B:多态前提 * a:要有继承关系. * 一个类是父类,一个类是子类 * b:要有方法重写. * c:要有父类引用指向子类对象 ...

  10. poj 2531 Network Saboteur 解题报告

    题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最 ...