Help Jimmy POJ - 1661

Help Jimmy POJ - 1661

题意:

在这里插入图片描述

场景中包括多个长度和高度各不相同的平台。地面是最低的平台,高度为零,长度无限。

Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终为1米/秒。当Jimmy落到某个平台上时,游戏者选择让它向左还是向右跑,它跑动的速度也是1米/秒。当Jimmy跑到平台的边缘时,开始继续下落。Jimmy每次下落的高度不能超过MAX米,不然就会摔死,游戏也会结束。

设计一个程序,计算Jimmy到底地面时可能的最早时间。

题解:

设dp[i][0]:表示到第i个板子上的左侧所花时间
dp[i][1]:表示到第i个板子上的右侧所花时间
从第j个到第i个平台上,第j的高度要大于i(高度差不能超过MAX),从j下来分左右两个端点,需要保证左右端点都在i平台的范围内(这样才能落在平台上),且注意,满足上面两个情况仍然不足,因为有可能j被k挡住了,从j就无法到i上面,一个平台最多只能到达另一个平台,所以我们用数组st[j][0/1]表示从平台j出发,从左/右端点掉下去会到哪个板子,如果st = -1说明可以直接掉到当前平台
详细看代码

代码:

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1010;
int n,m,t,x,y,st[N][2];//st[i][0]标记第i块板子左端可以落到那个板子,st[i][1]就是右端
struct node
{int l,r,h;
}e[N];
ll f[N][2];
bool cmp(node a,node b)
{if(a.h==b.h) return a.l<b.l;//这里其实无所谓加不加return a.h>b.h;
}
int main()
{cin>>t;while(t--){cin>>n>>x>>y>>m;for(int i=1;i<=n;i++){int a,b,c;cin>>a>>b>>c;e[i]={a,b,c};}e[0]={x,x,y};sort(e+1,e+n+1,cmp);memset(st,-1,sizeof st);memset(f,0x3f,sizeof f);f[0][0]=f[0][1]=0;for(int i=1;i<=n;i++){for(int j=0;j<i;j++){if(e[j].h-e[i].h<=m)//条件1{if(e[j].l>=e[i].l&&e[j].l<=e[i].r)//条件2{if(st[j][0]==-1)//条件3{f[i][0]=min(f[i][0],f[j][0]+e[j].h-e[i].h+e[j].l-e[i].l);f[i][1]=min(f[i][1],f[j][0]+e[j].h-e[i].h+e[i].r-e[j].l);st[j][0]=i;}}if(e[j].r>=e[i].l&&e[j].r<=e[i].r)//条件2{if(st[j][1]==-1)//条件3{f[i][0]=min(f[i][0],f[j][1]+e[j].h-e[i].h+e[j].r-e[i].l);f[i][1]=min(f[i][1],f[j][1]+e[j].h-e[i].h+e[i].r-e[j].r);st[j][1]=i;}}}}}ll ans=0x3f3f3f3f3f3f3f3f;for(int i=0;i<=n;i++)if(e[i].h<=m){if(st[i][0]==-1) ans=min(ans,f[i][0]+e[i].h);if(st[i][1]==-1) ans=min(ans,f[i][1]+e[i].h);}cout<<ans<<endl;}}

这是我一开始写的wa代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
const int maxn=2000;
struct node{int x1,x2,h;
}a[maxn]; 
bool cmp(node a,node b){return a.h>b.h;
}
int dp[maxn][3];
int main()
{int t;cin>>t;while(t--){memset(a,0,sizeof(a));int n=read(),x=read(),y=read(),MAX=read();for(int i=1;i<=n;i++){a[i].x1=read();a[i].x2=read();a[i].h=read();}a[0].x1=a[0].x2=x;a[0].h=y;sort(a+1,a+1+n,cmp);//从小到大 memset(dp,0x3f3f3f3f,sizeof(dp));	/*dp[i][0]表示到左侧的距离 dp[i][1]表示到右侧的距离 */dp[0][0]=0;dp[0][1]=0; for(int i=1;i<=n;i++){int l=a[i].x1,r=a[i].x2;for(int j=i-1;j>=0;j--){if(a[j].x2<=r&&a[j].x2>=l&&(a[j].h-a[i].h)<=MAX)//从第j个砖的右侧下来{l=a[j].x2;dp[i][0]=min(dp[i][0],dp[j][1]+(a[j].h-a[i].h)+(a[j].x2-a[i].x1)); dp[i][1]=min(dp[i][1],dp[j][1]+(a[j].h-a[i].h)+(a[i].x2-a[j].x2)); }if(a[j].x1>=l&&a[j].x1<=r&&(a[j].h-a[i].h)<=MAX)//从第i个砖的左测下来{r=a[j].x1;dp[i][0]=min(dp[i][0],dp[j][0]+(a[j].h-a[i].h)+(a[j].x1-a[i].x1));dp[i][1]=min(dp[i][1],dp[j][0]+(a[j].h-a[i].h)+(a[i].x2-a[j].x1));}}}int l=-0x3f,r=0x3f;for(int j=n;j>=0;j--){if(a[j].x2<=r&&a[j].x2>=l&&(a[j].h)<=MAX){l=a[j].x2;dp[n+1][0]=min(dp[n+1][0],dp[j][1]+a[j].h);dp[n+1][1]=min(dp[n+1][1],dp[j][1]+a[j].h);}if(a[j].x1>=l&&a[j].x1<=r&&(a[j].h)<=MAX){r=a[j].x1;dp[n+1][0]=min(dp[n+1][0],dp[j][0]+a[j].h);dp[n+1][1]=min(dp[n+1][1],dp[j][0]+a[j].h);}} cout<<min(dp[n+1][0],dp[n+1][1])<<endl;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 沉思录 - ServiceProvider 的二度出生

ASP.NET Core 终于将几乎所有的对象创建工作都和依赖注入框架集成了起来。并对大部分的日常工作进行了抽象。使得整个框架扩展更加方便。各个部分的集成也更加容易。今天我们要思考的部分仍然是从一段每一个工程中都大同小异的代码开始的。IWebHostBuilder CreateWebHostBuilde…

Acwing 216. Rainbow的信号

Acwing 216. Rainbow的信号 题意&#xff1a; 给你n个数&#xff0c;在这n个数中&#xff0c;等概率地选取两个数l&#xff0c;r&#xff0c;如果l>r,则交换l,r 把信号中的第 l 个数到第 r 个数取出来&#xff0c;构成一个数列 P。 A 部分对话的密码是数列 P 的 xor 和的…

合肥.NET技术社区首次线下聚会全程回顾【多图】

2019年3月16日对于合肥.NET来说是一个特别的日子&#xff0c;因为这是合肥.NET技术社区首次非正式线下聚会&#xff01;这次聚会受场地限制&#xff08;毕竟是聚餐的形式&#xff09;&#xff0c;即使换成了小椅子后&#xff0c;最多也只能容纳24个人&#xff0c;所以还有一些小…

SignalR第一节-在5分钟内完成通信连接和消息发送

前言首先声明&#xff0c;这又是一个小白从入门到进阶系列。 SignalR 这个项目我关注了很长时间&#xff0c;中间好像还看到过微软即将放弃该项目的消息&#xff0c;然后我也就没有持续关注了&#xff0c;目前的我项目中使用的是自己搭建的 WebSocket &#xff0c;连接管理和消…

【学习笔记】信息学竞赛中的概率与期望小结

信息竞赛——概率与期望事件事件的蕴含、包含事件的互斥事件的对立事件的和&#xff08;并&#xff09;事件的积&#xff08;交&#xff09;事件的差概率事件的独立性全概率公式贝叶斯公式概率DP&#xff08;竞赛中的考察&#xff09;期望&#xff08;竞赛中的考察&#xff09;…

尝试:Script Lab,快速 O365 开发工具//SL01)

《前言》Script Lab 我希望有一个系列&#xff08;连载&#xff09;&#xff0c;可是我挺担心没偿没有能力去驾驭它。虽然早年前己经接触过&#xff0c;但一直未有下决心开始 Office 365 的开发之旅&#xff0c;虽然一直被光标老师所鼓舞&#xff0c;但是我心有旁骛还没有真正做…

Keiichi Tsuchiya the Drift King

Keiichi Tsuchiya the Drift King 题意&#xff1a; 给定一辆小车长宽分别为 b&#xff0c;a&#xff0c;轨道的圆弧部分半径为 r&#xff0c;圆弧对应的角度为 d&#xff0c;求出小车能通过轨道的最小轨道宽度 w。 题解&#xff1a; 我们考虑小车处于什么状态会使弯道最宽…

AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控

概述Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。该项目有非常活跃的社区和开发人员&#xff0c;目前是独立的开源项目&#xff0c;现在最常见的Kubernetes容器管理系统中&#xff0c;通常也会搭配Prometheus进行监控。prome…

软件工程真的是一门什么用都没有的学科么?

软件工程真的是一门什么用都没有的学科么&#xff1f;-----读《构建之法》有感楔子我很惭愧&#xff0c;构建之法这本书已经出版四五年了&#xff0c;我之前却未曾涉猎&#xff0c;还是在通过组织长沙.net技术社区之后&#xff0c;才因为因缘际遇有幸认识邹欣邹老师之后&#x…

Ball Dropping

Ball Dropping 题意&#xff1a; 求&#xff1f;的具体长度 题解&#xff1a; 算一算就出来了 代码&#xff1a; #include<bits/stdc.h> using namespace std; int main(){double r,a,b,h;cin>>r>>a>>b>>h;if(2*r<b&&2*r<…

尝试:Script Lab,开发模式之知识储备//SL02

前期00&#xff1a;深度&#xff1a;从 Office 365 新图标来看微软背后的设计新理念前期01&#xff1a;尝试&#xff1a;Script Lab&#xff0c;快速 Office 365 开发工具 //SL01本期02&#xff1a;尝试&#xff1a;Script Lab&#xff0c;开发模式之知识储备 //SL02项目特点适…

WebApi网关之Bumblebee和Ocelot性能对比

Bumblebee是基于.net core 2.1开发的WebApi网关组件&#xff0c;由于Bumblebee所追求的轻量化和性能&#xff0c;所以它并没有像Ocelot那样从asp.net core上进行扩展&#xff1b;而是构建在BeetleX.FastHttpApi之上&#xff0c;主要原因BeetleX.FastHttpApi有着更轻量化和高性能…

在 .NET Core 中运行 JavaScript

一.前言在 .NET Framework 时&#xff0c;我们可以通过V8.NET等组件来运行 JavaScript&#xff0c;不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core &#xff0c;我们如何在 .NET Core 中运行 JavaScript 呢&#xff0c;答案是使用 NodeServices。关于为何有在 .N…

Named Volume 在 MySQL 数据持久化上的基本应用

原文作者&#xff1a;春哥非常感谢春哥的投稿&#xff0c;同时也有一些感慨。初识春哥时&#xff0c;春哥是美术设计大咖。后不久&#xff0c;创业并致力于游戏开发&#xff0c;已有3年。从Unity3D到IOS&#xff08;Swift&#xff09;开发&#xff0c;从前端开发到后端以及容器…

.Netcore 2.0 Ocelot Api网关教程(7)- 限流

本文介绍Ocelot中的限流&#xff0c;限流允许Api网关控制一段时间内特定api的总访问次数。限流的使用非常简单&#xff0c;只需要添加配置即可。1、添加限流修改 configuration.json 配置文件&#xff0c;对 UpstreamPathTemplate 为 /webapib/values 的配置修改如下&#xff1…

微信开发必看,使用.Net Core 开发微信跨平台应用

.NET Core 是一个开源通用的开发框架&#xff0c;源码由微软官方和社区共同支持。支持跨平台&#xff0c;即支持在 Window&#xff0c;macOS&#xff0c;Linux 等系统上的开发和部署&#xff0c;并且可以在硬件设备&#xff0c;云服务&#xff0c;和嵌入式/物联网方案中进行使用…

CF1526 D. Kill Anton

CF1526 D. Kill Anton 题意&#xff1a; 给你一个由’A’,‘N’.‘T’,O’四个字符组成的字符串b&#xff0c;现在要求你改变b的顺序得到a&#xff0c;使得a通过移动回到b的步数最多。 每次移动只能移动相邻两项 题解&#xff1a; 官方题解说&#xff1a;最佳情况为相同字符…

ASP.NET Core 3.0预览版体验

目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3&#xff0c;对应ASP.NET Core 3.0 Preview 3。ASP.NET Core 3.0 之后将不再支持.NET Framework&#xff0c;只运行在.NET Core 上面。ASP.NET Core 3.0 现在已经出到了第三个预览版&#xff0c;增加和改进了很多功能。环境准…

C# .net 中 Timeout 的处理及遇到的问题

C# 中 Timeout 的处理前言最近在项目中要实现一个功能&#xff0c;是关于 Timeout 的&#xff0c;主要是要在要在 TCP 连接建立的时间 和 整个请求完成的时间&#xff0c;在这两个时间层面上&#xff0c;如果超出了设置的时间&#xff0c;就抛出异常&#xff0c;程序中断。研究…

[CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)

CodeJam 2021 Round3 Square Freeproblemsolutioncodecode-stdproblem 神奈子是个很爱打麻将的老婆婆&#xff0c;有一天她把她的麻将放进了一个 nmn\times mnm 的网格图里&#xff0c;每个麻将可以左斜着放入网格中&#xff08;如 / &#xff09;&#xff0c;也可以右斜着&am…