kuangbin专题十二 HDU1176 免费馅饼 (dp)
免费馅饼
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 64198    Accepted Submission(s): 22545
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
5 1
4 1
6 1
7 2
7 2
8 3
0
Sample Output
4
之前的dp专题有这道题,当时没有写出来,刚才第一次写了正推的代码。没有考虑到只能从5开始,WA。后来改了倒推。改了中间的小bug,过了。
思路:在一个点,可以接到 左中右 三个位置的馅饼,为了避免边界处理,把可能下落的点0~10变为 1~11。 这样1的 左中右 就是 0 1 2了。比较方便一点。
由于是倒推,所以初始化 dp[maxt][j] = f[maxt][j], maxt 为 最晚的时间。
状态转移方程:dp[i][j] = f[i][j] + max(dp[i+1][j-1], max(dp[i+1][j], dp[i+1][j+1]))
画个样例体会一下。倒数第二行开始,该点最大值 = 该点原值 + 下一时刻的三个位置的最大值,由于我的pos右移了一位,所以最后答案为 dp[0][6]
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <sstream>
#include <stack>
using namespace std;
#define mem(a,b) memset((a),(b),sizeof(a))
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define sz(x) (int)x.size()
#define all(x) x.begin(),x.end()
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF =0x3f3f3f3f3f3f3f3f;
const double pi = acos(-1.0);
const double eps = 1e-;
const ll mod = 1e9+;
//head
int dp[ + ][ + ];//dp[t][pos] 用时间倒推,dp[0][6]就是答案
int f[ + ][ + ];
int main() {
int n, pos, t, maxt;
while(~scanf("%d", &n)) {
if(n == )
break;
mem(dp, );
mem(f, );
maxt = -;
while(n--) {
scanf("%d%d", &pos, &t);//这里读取反了。。WA了
f[t][pos+]++;
maxt = max(maxt, t);
}
for(int i = ; i <= ; i++)
dp[maxt][i] = f[maxt][i];//为了倒推,所以最后一行的f[i][j] 即为 dp[i][j]
for(int i = maxt-; i >= ; i--) {//核心代码
for(int j = ; j <= ; j++) {
dp[i][j] = f[i][j] + max(dp[i+][j-], max(dp[i+][j], dp[i+][j+]));
}
}
printf("%d\n", dp[][]);
}
}
kuangbin专题十二 HDU1176 免费馅饼 (dp)的更多相关文章
- kuangbin专题十二 HDU1260 Tickets (dp)
		
Tickets Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
 - kuangbin专题十二 POJ3186 Treats for the Cows (区间dp)
		
Treats for the Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7949 Accepted: 42 ...
 - HDU1176 免费馅饼 —— DP
		
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others ...
 - kuangbin专题十二 POJ1661 Help Jimmy (dp)
		
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14214 Accepted: 4729 Descr ...
 - kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
		
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
 - kuangbin专题十二 HDU1074 Doing Homework (状压dp)
		
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
 - kuangbin专题十二 HDU1069 Monkey and Banana  (dp)
		
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
 - HDU1176:免费馅饼(DP)
		
Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁 ...
 - kuangbin专题十二 HDU1029 Ignatius and the Princess IV (水题)
		
Ignatius and the Princess IV Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32767 K ( ...
 
随机推荐
- 带坑的几道PHP面试题
			
第二题 代码如下: $i='11'; printf("%d\n",printf("%d",printf("%d",$i))); 输出结果是多 ...
 - Android 4学习(2):概述 - AndroidManifes.xml
			
Android应用程序包含下面这几个部分: 程序的前后台: Activities Services 存储: Content Providers 消息传递: Intents Broadcast Rece ...
 - 问题:C#打开一个文本文档往里面写数据,没有就新建文档 ;结果:c#FileStream文件读写(转)
			
FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能.这是因为FileStream ...
 - CSS中cursor的pointer 与 hand(转)
			
CSS中cursor的pointer 与 hand 转载 2015年12月25日 16:18:36 标签: cursorpointer / cursorhand 1781 cursor:hand 与 ...
 - centos系统查看本机IP地址
			
centos系统查看本机IP地址,输入 ifconfig -a查看 centos查询上网公网IP输入 curl ifconfig.me 命令即可查看 centos查询上网网关IP,tracepath ...
 - Boost中实现线程安全
			
博客转载自: http://www.cnblogs.com/lvdongjie/p/4447142.html 1 boost原子变量和线程 #include <boost/thread.hpp& ...
 - Gstreamer编程
			
一.简介 GStreamer是一个开源的多媒体框架库.利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理.应用程序可以透明的利用解码和过滤技 ...
 - cf123E Maze
			
传送门 分析 见ptx大爷的博客 代码 #include<iostream> #include<cstdio> #include<cstring> #include ...
 - 前端基础 之 BOM和DOM
			
浏览目录 背景 BOM window对象 window的子对象 DOM HTML DOM树 查找标签 节点操作 事件 一.背景 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些 ...
 - SDUT 3373 数据结构实验之查找一:二叉排序树
			
数据结构实验之查找一:二叉排序树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 对应给定的一 ...