超时了啊,看了人家的正确代码,思路差不多,但是我觉得他错了,可就是ACCEPT了

我的代码

#include  "iostream"
#include "algorithm"
#define INF 100000
using namespace std;
struct node{int l,r,h;
}num[1010];
struct{int l,r;
}dp[1010];
bool cmp(node a,node b){return a.h>b.h;}
int ab(int a){return a>0?a:(-a);}
int min(int a,int b){return a>b?b:a;}
bool check(int a,int b){if(num[b].l<=a&&a<=num[b].r)return 1;else return 0;
}
int main(){int ncase,n,x,h,MAX,i,j,MIN,flag1,flag2,k;cin>>ncase;while(ncase--){MIN=INF;cin>>n>>x>>h>>MAX;for(i=1;i<=n;i++){cin>>num[i].l>>num[i].r>>num[i].h;}sort(num+1,num+n+1,cmp);num[0].l=num[0].r=x;num[0].h=h;dp[0].l=0,dp[0].r=0;for(i=1;i<=n;i++){dp[i].l=INF;dp[i].r=INF;flag1=1;flag2=1;for(j=0;j<i;j++){int flagl=1,flagr=1;for(k=j+1;k<i;k++){if(check(num[j].l,k)){flagl=0;}if(check(num[j].r,k)){flagr=0;}}if(flagl&&num[j].h-num[i].h<=MAX&&check(num[j].l,i)){dp[i].l=min(dp[i].l,dp[j].l+ab(num[i].l-num[j].l)+num[j].h-num[i].h);dp[i].r=min(dp[i].r,dp[j].l+ab(num[i].r-num[j].l)+num[j].h-num[i].h);}if(flagr&&num[j].h-num[i].h<=MAX&&check(num[j].r,i)){dp[i].l=min(dp[i].l,dp[j].r+ab(num[i].l-num[j].r)+num[j].h-num[i].h);dp[i].r=min(dp[i].r,dp[j].r+ab(num[i].r-num[j].r)+num[j].h-num[i].h);}}}for(i=0;i<=n;i++){int flagl=1,flagr=1;for(j=i+1;j<=n;j++){if(check(num[i].l,j))flagl=0;if(check(num[i].r,j))flagr=0;}if(flagl&&num[i].h<MAX)MIN=min(MIN,dp[i].l+num[i].h);if(flagr&&num[i].h<MAX)MIN=min(MIN,dp[i].r+num[i].h);}cout<<MIN<<endl;}
}

人家的代码

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
const int N=1010;
const int inf=1<<30;typedef struct In{int l,r,h;
}In;
In a[N];
int dp[N][2];int cmp(In a,In b){return a.h>b.h;
}int main(){//    freopen("data.in","r",stdin);
//    freopen("data.out","w",stdout);int t,N,Y,X,MAX;scanf("%d",&t);while(t--){scanf("%d%d%d%d",&N,&X,&Y,&MAX);a[0].l=a[0].r=X;a[0].h=Y;for(int i=1;i<=N;i++)scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].h);sort(a+1,a+N+1,cmp);memset(dp,0x0f0f0f0f,sizeof(dp));dp[0][0]=dp[0][1]=0;for(int i=0;i<=N;i++){for(int j=i+1;j<=N;j++){if(a[i].h-a[j].h<=MAX){if(a[j].l<=a[i].l&&a[j].r>=a[i].l){dp[j][0]=min(dp[j][0],dp[i][0]+a[i].l-a[j].l+a[i].h-a[j].h);dp[j][1]=min(dp[j][1],dp[i][0]+a[j].r-a[i].l+a[i].h-a[j].h);break;}}}for(int j=i+1;j<=N;j++){if(a[i].h-a[j].h<=MAX){if(a[j].l<=a[i].r&&a[j].r>=a[i].r){dp[j][0]=min(dp[j][0],dp[i][1]+a[i].r-a[j].l+a[i].h-a[j].h);dp[j][1]=min(dp[j][1],dp[i][1]+a[j].r-a[i].r+a[i].h-a[j].h);break;}}}}int MIN=inf;for(int i=N;i>=0;i--){if(a[i].h>MAX) break;bool flag=false;for(int j=i+1;j<=N;j++){if(a[j].l<=a[i].l&&a[j].r>=a[i].l){flag=true;break;}} if(!flag) MIN=min(MIN,dp[i][0]+a[i].h);flag=false;for(int j=i+1;j<=N;j++){if(a[j].l<=a[i].r&&a[j].r>=a[i].r){flag=true;break;}} if(!flag) MIN=min(MIN,dp[i][1]+a[i].h);}printf("%d\n",MIN);}return 0;
}

转载于:https://www.cnblogs.com/dowson/p/3319702.html

1661Help Jimmy相关推荐

  1. Help Jimmy(递归)

    问题描述 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy 老鼠在时刻0 从高 ...

  2. Help Jimmy POJ - 1661

    Help Jimmy POJ - 1661 题意: 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终 ...

  3. 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]

    Help Jimmy POJ - 1661 题意:大致是一个人从某个点开始下落,下落的速度是1m/s,然后在平台上的时候可以左右移动,移动的速度也是1m/s,但是这里有一个限制,就是说每次下落的距离不 ...

  4. 【POJ - 1661】Help Jimmy(记忆化搜索,dp)

    题干: Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开 ...

  5. POJ1661 Help Jimmy(dp)

    "Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某 ...

  6. NKOJ 1361 帮帮吉米(Help Jimmy)

    话说这道题百度上好像没几个题解,大多数题解又只有代码和少量文字,于是乎我就来水题解了. Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 景中包括 ...

  7. 区块链开发者观点: 来自 EOS 三国的 Jimmy Gong

    如果你不知道节省区块链开发时间和研究时间的方法.技巧,那你的起步可能会困难重重.dfuse 在与社区中经验丰富的开发人员交流,分享有价值的相关信息.本周,我们邀请到了 来自EOS三国的 Jimmy G ...

  8. CancerSubtypes包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理)

    CancerSubtypes包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理,感谢Jimmy老师!) 1. 引言 2. 数据处理 2.1 基本处理 2.1.1 通过检查数据分布来分 ...

  9. ProTICS包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理)

    ProTICS包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理,感谢Jimmy老师!) 1.设置环境 2.Part1的结果 3.Part2的结果 4.Part3的结果 5.相关函数 ...

  10. 生信技能树 电脑配置linux,生信技能树--Jimmy - Linux 20题

    一.在任意文件夹下面创建形如 1/2/3/4/5/6/7/8/9 格式的文件夹系列. 二.在创建好的文件夹下面,比如我的是 /Users/jimmy/tmp/1/2/3/4/5/6/7/8/9 ,里面 ...

最新文章

  1. linux rpm mysql 路径_linux基础-linux 下 安装 rpm 格式 的 mysql
  2. linux 公钥登录
  3. 【今晚7点半】:超低延迟下的实时合唱体验升级
  4. 书籍推荐-记这几年看的书
  5. PSPNet-tensorflow实现并训练数据
  6. 从ASP.NET的PHP执行速度比较谈起
  7. PHP知识总结(一)
  8. Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
  9. 号称最安全的Mega网盘加密方法分析
  10. Python爬虫实现突破百度文库限制
  11. jedis的Read timed out异常解决
  12. PLSQL代码调试Oracle dbms_utility返回错误
  13. Python 计算思维训练——数组和曲线绘制练习(一)
  14. Python学习出来好找工作吗?好找工作的关键是什么?
  15. Tk应用程序:密码输入框
  16. GISer从零开始学习ArcGIS API for JavaScriptArcGIS Online教程(三)免费注册和使用ArcGIS Online
  17. Socket基本操作的C++封装--以及Socket通信实践
  18. CanOpen Message
  19. 黑马程序员 银行业务调度系统
  20. 薄荷英语20181103

热门文章

  1. PowerMockito问题解决一则
  2. 7天java_JAVA第7天
  3. Ubuntu安装RabbitMQ及RabbitMQ基于使用
  4. [渝粤教育] 西南科技大学 建筑工程质量缺陷事故分析及处理 在线考试复习资料
  5. 一个程序段两个小问题
  6. Tensorflow官方文档学习理解 (四)-深入MNIST
  7. 教大家如何修改博客背景
  8. 2018-2019-1 20165212 《信息安全系统设计基础》第八周学习总结(pwd)
  9. 百度统计api 关于搜索引擎返回参数问题
  10. CSS选择器详解(转)