免费馅饼

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 62694    Accepted Submission(s): 21961

Problem Description

都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝,每秒种只有在移动不超过一米的范围内接住坠落的馅饼。现在给这条小径如图标上坐标:


为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)

Input

输入数据有多组。每组数据的第一行为以正整数n(0<n<100000),表示有n个馅饼掉在这条小径上。在结下来的n行中,每行有两个整数x,T(0<T<100000),表示在第T秒有一个馅饼掉在x点上。同一秒钟在同一点上可能掉下多个馅饼。n=0时输入结束。

Output

每一组输入数据对应一行输出。输出一个整数m,表示gameboy最多可能接到m个馅饼。

提示:本题的输入数据量比较大,建议用scanf读入,用cin可能会超时。
Sample Input

6

5 1

4 1

6 1

7 2

7 2

8 3

0

Sample Output

4

思路

找出输入的最大时间,从最大时间下开始向前找能接到的最多的馅饼数。最后输出时间为0,位置为5的馅饼数。

状态转移方程:dp[i][j]=max(dp[i+1][j+1],max(dp[i+1][j],dp[i+1][j-1]))

实现过程:

该题样例可以建立成一个二维矩阵,如图所示

那么从最后一行开始,因为每个点在每秒有三种可能走的情况,所以要记录下走到某点时拿到馅饼数的最大值。每次dp[i][j]都会在本身的基础上加上dp[i+1][j+1],dp[i+1][j],dp[i+1][j-1]这三者的最大值

如:在开始的时候,dp[3][8]=1,dp[2][7]=2 。在状态转移后,倒数第二行的元素变成了

0 0 0 0 0 0 3 1 1 0

继续往前走,倒数第三行(第1s的那一行)各元素变成了

0 0 0 1 1 4 3 3 0 0

到第一行(第0s)

0 0 1 1 4 4 4 3 3 0

这时候输出起始位置dp[0][5]的值就可以了

AC代码

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <math.h>
  6. #include <limits.h>
  7. #include <map>
  8. #include <stack>
  9. #include <queue>
  10. #include <vector>
  11. #include <set>
  12. #include <string>
  13. #define ll long long
  14. #define ms(a) memset(a,0,sizeof(a))
  15. #define pi acos(-1.0)
  16. #define INF 0x3f3f3f3f
  17. const double E=exp(1);
  18. const int maxn=1e5+10;
  19. using namespace std;
  20. int dp[maxn][20];
  21. int main(int argc, char const *argv[])
  22. {
  23. // 状态转移方程:dp[i]=max(dp[i+1][j+1],max(dp[i+1][j-1],dp[i+1][j]))
  24. int n;
  25. while(~scanf("%d",&n)&&n)
  26. {
  27. ms(dp);
  28. int res=0;
  29. int place,time;
  30. for(int i=0;i<n;i++)
  31. {
  32. scanf("%d%d",&place,&time);
  33. dp[time][place]++;
  34. res=max(res,time);
  35. }
  36. for(int i=res;i>=0;i--)
  37. {
  38. for(int j=0;j<11;j++)
  39. {
  40. dp[i][j]+=max(dp[i+1][j-1],max(dp[i+1][j+1],dp[i+1][j]));
  41. }
  42. }
  43. printf("%d\n",dp[0][5]);
  44. }
  45. return 0;
  46. }

HDU 1176:免费馅饼(DP,自认为很详细的解释)的更多相关文章

  1. HDU 1176免费馅饼 DP数塔问题转化

    L - 免费馅饼 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  2. HDU - 1176 免费馅饼 DP多种状态转移

    免费馅饼 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了 ...

  3. HDU 1176 免费馅饼(DP)

    职务地址:HDU 1176 以时间为横轴.11个点位纵轴构造一个矩阵.然后利用数字三角形的方法从上往下递推下去. 代码例如以下: #include <iostream> #include ...

  4. HDU 1176 免费馅饼 DP类似数塔题

    解题报告: 小明走在一条小路上,这条小路的长度是10米,从左到右依次是0到10一共十个点,现在天上会掉馅饼,给出馅饼掉落的坐标和时间,一开始小明的位置是在坐标为5的位置, 他每秒钟只能移动一米的距离, ...

  5. HDU 1176 免费馅饼 (动态规划)

    HDU 1176 免费馅饼 (动态规划) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼 ...

  6. HDU 1176 免费馅饼 (类似数字三角形的题,很经典,值得仔细理解的dp思维)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)     ...

  7. hdu 1176 免费馅饼(数塔类型)

    http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  8. HDU 1176 免费馅饼(记忆化搜索)

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

  9. HDU 1176 免费馅饼 (动态规划、另类数塔)

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

  10. HDU 1176 免费馅饼

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

随机推荐

  1. 《剑指offer》第二十四题(反转链表)

    // 面试题24:反转链表 // 题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的 // 头结点. #include <iostream> #include &quo ...

  2. SQL Timeout超时的处理方法

    第一步:修改Web.config配置文件.在数据库连接字符串中加上连接时间Connect Timeout,根据实际情况定时间. <!--连接数据库--> <connectionStr ...

  3. English trip -- VC(情景课) 7 D Reading 阅读练习

    Read Hi patty, This morning, Smuel and I are going to The Clothes place. Samuel needs blue pants.He ...

  4. 51 jquery 节点操作和 bootstrapt

    jquery 和 bootstrapt1.jquery each 函数 1.each 循环方式一: 可循环对象: var arr =["alex","deng" ...

  5. python-day68--模型层基础(model)

    一.ORM : object relationship mapping   对象映射关系 映射关系: 表名 <-------> 类名 字段 <-------> 属性 表记录 & ...

  6. RedHat Linux 5下不能使用fdisk的问题

    最近在用RedHat Linux5的时候,使用fdisk命令,遇到了下面的错误: bash:fdisk:command not found 在网上找了找,解决方案如下: 首先,这个错误的原因是因为fd ...

  7. ASP.NET的内置对象 —— Request 对象

    Request 对象最大的用途在于提交表单信息. (可获取页面间传递的值.客户端的 IP 地址等) 3.2.2 获取页面间传送的值 获取页面传送参数值是 Request 对象最广泛的应用之一. ASP ...

  8. qt +ChartDirector 绘制图表

    自从开发由c#转入Qt后一直寻找一款Qt下的图形控件库,最后ChartDirector控件映入眼球.ChartDirector控件使用方便,快捷,灵活,功能强大,交互性强.在web服务器以及嵌入式应用 ...

  9. sql去重;同一条数据出现多条取一条的sql语句

    理论上相同数据个别字段值不同重复问题: 1.某字段重复,其他字段值不同时,按重复字段分组只取一条的sql语句(eg:相同的数据某个字段值有差别导致存储两条或多条无意义重复数据的情况)select s. ...

  10. Bellman-Ford模板

    转载链接:http://blog.csdn.net/niushuai666/article/details/6791765 Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情 ...