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. 性能測试JMeter趟的坑之JMeter的bug:TPS周期性波动问题

    先说下问题: 我在做性能測试时,使用JMeter搞了100个并发,以100TPS的压力压測十分钟,但压力一直出现波动.并且出现波动时JMeter十分卡,例如以下图: 周期性TPS波动 各种猜測: 所以 ...

  2. [原创] 在线音乐API的研究 (Part 2.1)

    最近,在优化一个自己写的音乐播放器.主要目的是回顾.归纳,并希望能够写出一个属于自己的common lib.今天,主要是关于在线音乐API的一些分析结果.此次,主要分析的是歌词.专辑部分.在线搜索音乐 ...

  3. Ubuntuserver版安装

          近期因为工作的须要.又一次部署server.安装了Ubuntuserver版本号,依据当时遇到的一些问题,整理了下,为方便以后的使用做个记录.       因为直接安装server端.无法 ...

  4. python的pexpect模块

    Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. P ...

  5. 简明扼要谈Spring IOC的好处

    http://a-kuei.iteye.com/blog/676524 iOC:控制反转,它是不是什么技术,它是一种设计模式.所谓控制反转就是由容器控制程序间的关系,而不是传统实现中,由编程代码直接操 ...

  6. directdraw 显示yuv

    http://www.cnblogs.com/lidan/archive/2012/03/23/2413772.html http://www.yirendai.com/msd/

  7. mybatis xml文件解析

    1 parameterType 如果参数只有一个,比如一个id,即int类型的id,那么parameterType直接是int. 如果参数有多个,那么就用表中一行对应的类,默认是类的名字和表中列的名字 ...

  8. swing_tableModel 创建表格

    import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Panel; import java.util.Ar ...

  9. bashdb bashdebug

    sudo  apt-get install bashdb bashdb  --debug 一.列出代码和查询代码类: l 列出当前行以下的10行 - 列出正在执行的代码行的前面10行 . 回到正在执行 ...

  10. (C)strcpy ,strncpy和strlcpy的基本用法

    好多人已经知道利用strncpy替代strcpy来防止缓冲区越界. 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式. 1. strcpy strcpy 是依据 /0 作为结束判断的, ...