免费馅饼 

Descriptions:

都说天上不会掉馅饼,但有一天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

题目链接:

https://vjudge.net/problem/HDU-1176

这题逆着来dp

    5                           b=0
       456                         b=1
     34567                       b=2
    2345678                    b=3
  123456789                   b=4
012345678910               b=5

b代表时间    a代表位置  (a,b)代表第b秒在a位置上馅饼的数量   前面的塔数代表位置变化,不管你最后的馅饼掉到哪里,都是从(5,0)出发的,所以可以倒着来算

先求初始化数据 在(a,b)分别有几个馅饼

peice[a][b] 代表第b秒在a位置上馅饼的数量   dp[a][b]代表第b秒在a位置上做多能有多少馅饼

b=4  即是从b=5得来的 例:(0,5)=1 第5秒在0位置有1个馅饼

            (1,5)=2  第5秒在1位置有2个馅饼

            (1,4)=3  第4秒在1位置有3个馅饼

          那么(1,4)上做多可以有5个馅饼 (1,4)+(0,5)=5  dp[1][4]=max(dp[0][5],dp[1][5])+peice[1][4]                 即:从(1,5)走到(1,4)

                  得到公式:        

                      范围是[0,10],所以i=1的时候只能是i 或者 i+1
                      if(i==0)
                      dp[i][j]=max(dp[i][j+1],dp[i+1][j+1])+piece[i][j];
                      其他地方i-1、i、i+1都行 即便i=11也不影响,因为dp[11][j]初始化为0了
                      else
                      dp[i][j]=max(dp[i-1][j+1],max(dp[i][j+1],dp[i+1][j+1]))+piece[i][j];

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x, y) memset(x, y, sizeof(x))
#define Maxn 100000+10
using namespace std;
int m;
int dp[][Maxn];//dp[i][j]在第j秒在i位置上最多有多少个馅饼
int piece[][Maxn];//piece[i][j]在第j秒在i位置上存在多少个馅饼
int main()
{
while(cin>>m&&m!=)
{
int a,b,t=;//第b秒有一个馅饼掉在a点 t代表最长的时间
MEM(dp,);
MEM(piece,);
for(int i=; i<m; i++)
{
cin>>a>>b;
piece[a][b]++;//第b秒在a位置上出现馅饼 数量+1
t=max(t,b);//最长时间更新
}
for(int i=; i<=; i++)//初始化最底层
dp[i][t]=piece[i][t];
for(int j=t-; j>=; j--)
{
for(int i=; i<=; i++)
{
//范围是[0,10],所以i=1的时候只能是i 或者 i+1
if(i==)
dp[i][j]=max(dp[i][j+],dp[i+][j+])+piece[i][j];
//其他地方i-1、i、i+1都行 即便i=11也不影响,因为dp[11][j]初始化为0了
else
dp[i][j]=max(dp[i-][j+],max(dp[i][j+],dp[i+][j+]))+piece[i][j];
}
}
cout<<dp[][]<<endl;
}
return ;
}
 
 

【HDU - 1176 】免费馅饼 (逆dp)的更多相关文章

  1. HDU - 1176 免费馅饼 【DP】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] ...

  2. HDU 1176 免费馅饼:dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意: 横坐标范围为[0,10],你在第0秒站在坐标为5的地方. 在接下来的一段时间内,会有n个 ...

  3. HDU 1176 免费馅饼(DP)

    点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...

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

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

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

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

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

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

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

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

  8. HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组

    http://acm.hdu.edu.cn/showproblem.php?pid=1176 首先可以处理出整张地图的状态. book[T][POS]表示第T秒,在第pos个地方有多少个馅饼. dp[ ...

  9. HDU 1176 免费馅饼(DP)

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

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

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

随机推荐

  1. Django2 外键遇到的坑

    # 出版社 class Publisher(models.Model): # 自增.主键 id id = models.AutoField(primary_key=True) # varchar(32 ...

  2. jdbc实现批量提交rollback

    最近上了一个老项目,要修改一些业务,具体的思路是在jsp中实现对数据的某些批量操作,因此做一下笔记. 1.整体jdbc建立连接/关闭连接 conn = DbUtil.getConnection(); ...

  3. [洛谷P4178] Tree (点分治模板)

    题目略了吧,就是一棵树上有多少个点对之间的距离 \(\leq k\) \(n \leq 40000\) 算法 首先有一个 \(O(n^2)\) 的做法,枚举每一个点为起点,\(dfs\) 一遍可知其它 ...

  4. 「雅礼集训 2017 Day2」棋盘游戏

    祝各位圣诞后快乐(逃) 题目传送门 分析: 首先棋盘上的路径构成的图是一张二分图 那么对于一个二分图,先求出最大匹配,先手如果走到关键匹配点,只要后手顺着匹配边走,由于不再会出现增广路径,所以走到最后 ...

  5. python接口自动化测试 - configparser配置文件解析器详细使用

    configparser简介 ConfigParser模块已在Python 3中重命名为configparser 该模块定义了ConfigParser类. ConfigParser类实现一种基本的配置 ...

  6. SpringBoot简单实现登录功能

    登陆 开发期间模板引擎页面修改以后,要实时生效 1).禁用模板引擎的缓存 # 禁用缓存 spring.thymeleaf.cache=false 2).页面修改完成以后ctrl+f9:重新编译: 登陆 ...

  7. Java程序员学习Go指南(终)

    我的博客:https://www.luozhiyun.com/archives/215 context.Context类型 Context类型可以提供一类代表上下文的值.此类值是并发安全的,也就是说它 ...

  8. Nutz框架-- Cnd条件使用原生sql

    案例 今天接到一个临时的业务需求,做一个简单的过滤作为临时业务需要使用一两天,于是想到在原有的Cnd条件上加上一个Not like 进行过滤,但是发现现有Cnd条件查询好像满足不了 解决方案 使用Nu ...

  9. 逆向番茄社区app的rsa加密方式

    Parse RSA public and private key pair from string in Java 逆向某APP,发现其大部分配置文件都是加密的 .所以逆向算法并解密 RSA和AES密 ...

  10. jenkins集成gitlab

     一.配置jenkins 1.安装Gitlab Hook Plugin )生成随机token 在系统中生成 openssl rand -hex 0f2a47c861133916d2e299e3 )创建 ...