HDU——1176 免费馅饼(动态规划 类似数塔问题)

2023-12-28 14:32

本文主要是介绍HDU——1176 免费馅饼(动态规划 类似数塔问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem Description

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

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

Input

输入数据有多组。每组数据的第一行为以正整数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

解题思路:

典型的动态规划,与数塔问题(详解)十分相似。数塔问题的解决是依靠二维矩阵tower[][]来解决的,从顶端点出发,每一个节点可以选择向下一层的左或者右走,一直走到最底层,找出一条路径,使得路径上的数字之和最大.假设当前在tower[i][j](第i层的第j个位置),那么下一次可到达的节点为tower[i+1][j]或者tower[i+1][j+1].
将本题转化为数塔问题解决,那么本题中时间就是数塔pie的层数t,每一层有11个节点(0 ~ 10),例如:pie[t][i]表示gameboy第t秒的时候,处于节点i处。注:本题中在从上一层向下一层跳时,可以向左,向右,也可以就在原地,所以每一次跳时都有三个选择(注意左右边界)。

代码:

#include <stdio.h>
#include <string.h>
using namespace std;int pie[100001][11] = {0};int maxvalue(int a ,int b ,int c){  int temp = a;if(b > temp)temp = b;if(c > temp)temp = c;return temp;
}
int main(){int n , t , x ,i , j , maxt = 0;while(scanf("%d",&n) != EOF){memset(pie , 0 , sizeof(pie));if(n == 0)break;for(i = 0 ; i < n ; i ++){scanf("%d %d",&x ,&t);if( t > maxt)maxt = t;pie[t][x] += 1;}for( i = maxt - 1 ; i >= 0 ; i --){   //选择下一跳的方向pie[i][0] = pie[i][0] + pie[i+1][0] > pie[i][0] + pie[i+1][1] ? pie[i][0] + pie[i+1][0] : pie[i][0] + pie[i+1][1];for(j = 1 ; j <= 9 ; j ++){pie[i][j] = maxvalue(pie[i][j] + pie[i+1][j-1] , pie[i][j] + pie[i+1][j] ,pie[i][j] + pie[i+1][j+1]);}pie[i][10] = pie[i][10] + pie[i+1][10] > pie[i][10] + pie[i+1][9] ? pie[i][10] + pie[i+1][10] : pie[i][10] + pie[i+1][9];}printf("%d\n",pie[0][5]);}return 0;
}

这篇关于HDU——1176 免费馅饼(动态规划 类似数塔问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546270

相关文章

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Kotlin Map映射转换问题小结

《KotlinMap映射转换问题小结》文章介绍了Kotlin集合转换的多种方法,包括map(一对一转换)、mapIndexed(带索引)、mapNotNull(过滤null)、mapKeys/map... 目录Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、map

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx