原题地址:http://47.93.252.151/problem.php?id=1151   

                                         1151: 轻羽飞扬

题目描述

电视动画《轻羽飞扬》改编自滨田浩辅原作的同名漫画,作为今年的7月新番,dyl非常喜欢尤其是里面的大魔王&&主角 羽咲绫乃,我们知道绫乃小的时候特别喜欢打羽毛球,她的母亲千夏是一个非常有名的羽毛球选手曾获得女子单人羽毛球全日本综合优胜十连霸冠军,对待自己的女儿千夏有独特的训练方式,绫乃很喜欢和母亲打羽毛球,但是呢千夏每天只和绫乃打一局,一旦绫乃接不住母亲的球,千夏就让绫乃自己训练,作为绫乃的好朋友藤泽英玲奈你将如何帮助绫乃能够更多的接到母亲的羽毛球呢?

首先 我们将羽毛球场分成0-10 11个位置如图所示

最开始 绫乃站在5的位置,每一秒钟都会有若干个球落在若干个位置,由于绫乃刚刚进行过训练所以很累,她只能接到所处位置或者相邻位置上的球,所以绫乃最多能够接到几个球呢?

输入

输入有多组 不超过10组数据    以0结尾

每组 第一行一个数 n 表示球的数量  (n<100000)

第二行到n+1行每行两个数x,t (x代表球落下的位置,t代表第几秒) (t<100000)

输出

一个数代表 绫乃最多能够接到的球的数量

//

开始时站在5这个位置,因此在第一秒,ta只能接到4,5,6这三个位置中其中一个位置上的羽毛球。问最多可能接到多少个球?

样例输入

6
5 1
4 1
6 1
7 2
7 2
8 3
0

样例输出

4

第一次写的时候用DFS爆搜,完美地码了出来,十分激动,然后完美地TLE了。。。

TLE的代码: (时间超限 83%)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define closeio std::ios::sync_with_stdio(false)int a[12][1000005];
int te,ans;void dfs(int n,int time,int sum)
{int i,tmp=0;tmp=sum+a[n][time];ans=max(ans,tmp);if(time==te)return ;for(i=-1;i<=1;i++){if(n+i<0||n+i>11)continue;dfs(n+i,time+1,tmp);}
}int main()
{int t,n,i,x;while(~scanf("%d",&n)&&n){mem(a,0);int maxn=0;while(n--){scanf("%d%d",&x,&t);maxn=max(maxn,t);a[x][t]++;}ans=0;te=maxn;dfs(5,0,0);printf("%d\n",ans);}return 0;
}

超时是因为大部分点都会被搜索多次,然后取其最大值,导致效率较低。看了题解才知道原来是数塔DP。。

基本思路与上面的DFS差不多,建一个二维数组,但不是从一个点往上拓展三个点,而是从一个点找到下面能够通往它的三个点,取其中最大值,加上这个点本身的值就得到这个点的dp值,只需循环一次即可找出每个最高点的最大值。

dp[i][j]表示在i秒时j位置最多可以接到多少球

dp[i][j]的最大值取决于下面三个点 dp[i-1][j-1] dp[i-1][j] dp[i-1][j+1]中的最大值,

DP代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
#include<cmath>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define closeio std::ios::sync_with_stdio(false)
#define maxn 1000005int a[maxn][12],dp[maxn][12];    //dp[i][j]表示在i秒时j位置最多可以接到多少球 int main()
{int n,i,j,x,y,t;while(cin>>n&&n){mem(a,0);int m=0;while(n--){scanf("%d%d",&x,&y);m=max(m,y);a[y][x]++;}for(i=0;i<11;i++)dp[0][i]=-1;            dp[0][5]=a[0][5];for(i=1;i<=m;i++){for(j=0;j<=10;j++){int t=dp[i-1][j];if(j-1>=0)t=max(t,dp[i-1][j-1]);if(j+1<=10)t=max(t,dp[i-1][j+1]);if(t!=-1)dp[i][j]=t+a[i][j];elsedp[i][j]=-1;}}int t=-1;for(i=0;i<=10;i++)t=max(t,dp[m][i]);cout<<t<<endl;}return 0;
}

【NYNU 1151】轻羽飞扬 数塔DP相关推荐

  1. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU 2084 数塔 DP

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 题目: 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走 ...

  3. HD 2048 数塔 DP(简单递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  4. 1071: 数塔 (动态规划)

    题目描述 PIPI在CSU的某个角落发现了一座金字塔,而且这座金字塔是由数字组成的(如下图所示),现在PIPI想到塔顶去看看,它可以从底层任意一个数字出发逐层爬上去.PIPI每次可以爬至上一层相邻的数 ...

  5. HDU-2084 数塔 经典dp,水

    1.HDU-2084   数塔 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 3.总结:从下往上推,最后归于顶点.方程为  dp[i][j] ...

  6. HDU -- 2084 数塔(简单DP)

    HDU -- 2084  数塔 题意: 自上而下,选择一条累计和最大的路径 分析: 顶点只与左右两个子节点相关,且子节点路径的选择与顶点无关(无后效性) 状态dp[i][j]:表示(i,j)点向下得到 ...

  7. hdu 1176 dp 数塔问题

    哎,一开始没看到从5开始.... 后来写懵了,用了queue正推,记录能到达的节点,p[i+1][j] = max(p[i][j],max(p[i][j-1],p[i][j+1])) 嗯,用stl m ...

  8. HDU2084 数塔【DP】

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. hdu 2084 数塔(DP)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  10. hdu1176 免费馅饼 ( 数塔(DP))

    免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

最新文章

  1. 【CentOS Linux 7】实验5【Samba服务器管理】
  2. VTK:可视化之ReverseAccess
  3. Matlab图片改颜色通道不改名存储
  4. 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的
  5. i2c通信 msp430g2553_关于msp430G2553的I2C串行通信
  6. LeetCode 92. 反转链表 II(双指针)
  7. 项目管理学习总结(7)——阿里云架构师:技术高手转向管理体会
  8. 富人为什么赚钱这么容易
  9. gcc/g++版本切换与降级
  10. C# 计算程序运行耗时的方法
  11. Jenkins安装教程
  12. PyCharm 2020安装(免费版)
  13. 计算机组装维修中级试题,维修电工中级培训考试题及答案
  14. 【毕业设计】大数据工作岗位数据分析与可视化 - python flask
  15. 用html作小米官网首页效果,html+css实现小米商城首页静态页面
  16. tomcat启动后无法访问到8080页面的原因
  17. 用request获取请求地址Ip
  18. Android学习之复选框checkbox自定义样式以及调整图片大小
  19. 数学图形(2.2)N叶结
  20. 微信小程序开发学习第二天 按部就班的名片小程序

热门文章

  1. 西电计科院Python程序设计随课笔记(李光夏)
  2. 百宝,神烦云免费网络验证autojs实例代码
  3. 普通笔记本/台式机安装MacOS教程
  4. win10服务器怎么连接显示器不亮,Win10检测不到第二个显示器怎么解决?Win10外接显示器黑屏解决方法...
  5. 心情不好的时候,用 Python 画棵樱花树送给自己吧
  6. UINO优锘:干货分享 | 虚拟现实建模基础
  7. Linux 服务器进行安全加固,防止黑客攻击
  8. selenium调用javascript代码的方法
  9. html关于圣诞节主题的网页,玩转圣诞创意!10个以圣诞节为主题的优秀网站设计...
  10. 开发部门现在存在的一些问题