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. Effective C++ 条款13/14 以对象管理资源 || 在资源管理类中小心拷贝行为

    三.资源管理       资源就是一旦你使用了它,将来不用的时候必须归还系统.C++中最常用的资源就是动态内存分配.其实,资源还有 文件描述符.互斥器.图形界面中的字形.画刷.数据库连接.socket ...

  2. 对交换机VLAN及各种端口类型的理解

    每学习一种技术时,我们往往需要去了解why,即这个技术是为解决什么问题而出现的. VLAN全称为Virtual Local Area Network,即虚拟局域网,是逻辑上的一种划分.一般来说,如果交 ...

  3. Kubernetes实战阅读笔记--1、介绍

    1.业界根据云计算提供服务资源的类型将其划分为三大类: 基础设施即服务(Infrastructure-as-a-Service,IaaS).平台即服务(Platform-as-a-Service,Pa ...

  4. iframe引入页面

    将外层css框架单独存放在一个css文件之中,将iframe的css单独写在一个css文件,避免iframe中的html,body等公共部分的样式冲突. 外层框架单独写在一个css,如: frame. ...

  5. js数据类型简单介绍

    JS数据类型 ECMAScript中有5种简单的数据类型:Undefined,Null,Boolean,Number,String.还有一种复杂的数据类型--Object(本质上是由一组无序的名值对组 ...

  6. 常见的页面效果,相关的js代码

    1.焦点图 $(document).ready(function(){ var i=0; var autoChange= setInterval(function(){ if(i<$(" ...

  7. RedisCluster集群搭建

    搭建集群方案 安装部署任何一个应用其实都很简单,只要安装步骤一步一步来就行了.下面说一下 Redis 集群搭建规划,由于集群至少需要6个节点(3主3从模式),所以,没有这么多机器给我玩,我本地也起不了 ...

  8. MYSQL初级学习笔记九:MySQL索引的使用!(视频序号:初级_51)

    知识点十一:索引的使用(51) 什么是索引: 索引的定义: 在关系型数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行的更快.索引的作用相当于图书的目录,可以 根据目录中的页码 ...

  9. Android 走向MD的配色风格

    这是一些google官方推出的推荐色值 下面补充上对应的xml文件,省得大家再去自己写 <?xml version="1.0" encoding="utf-8&qu ...

  10. html5--6-4 CSS选择器

    html5--6-4 CSS选择器 实例 学习要点 掌握常用的CSS选择器 了解不太常用的CSS选择器 什么是选择器 当我们定义一条样式时候,这条样式会作用于网页当中的某些元素,所谓选择器就是样式作用 ...