1661Help Jimmy
超时了啊,看了人家的正确代码,思路差不多,但是我觉得他错了,可就是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相关推荐
- Help Jimmy(递归)
问题描述 "Help Jimmy" 是在下图所示的场景上完成的游戏: 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy 老鼠在时刻0 从高 ...
- Help Jimmy POJ - 1661
Help Jimmy POJ - 1661 题意: 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开始下落,它的下落速度始终 ...
- 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]
Help Jimmy POJ - 1661 题意:大致是一个人从某个点开始下落,下落的速度是1m/s,然后在平台上的时候可以左右移动,移动的速度也是1m/s,但是这里有一个限制,就是说每次下落的距离不 ...
- 【POJ - 1661】Help Jimmy(记忆化搜索,dp)
题干: Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某处开 ...
- POJ1661 Help Jimmy(dp)
"Help Jimmy" 是在下图所示的场景上完成的游戏. 场景中包括多个长度和高度各不相同的平台.地面是最低的平台,高度为零,长度无限. Jimmy老鼠在时刻0从高于所有平台的某 ...
- NKOJ 1361 帮帮吉米(Help Jimmy)
话说这道题百度上好像没几个题解,大多数题解又只有代码和少量文字,于是乎我就来水题解了. Description "Help Jimmy" 是在下图所示的场景上完成的游戏. 景中包括 ...
- 区块链开发者观点: 来自 EOS 三国的 Jimmy Gong
如果你不知道节省区块链开发时间和研究时间的方法.技巧,那你的起步可能会困难重重.dfuse 在与社区中经验丰富的开发人员交流,分享有价值的相关信息.本周,我们邀请到了 来自EOS三国的 Jimmy G ...
- CancerSubtypes包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理)
CancerSubtypes包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理,感谢Jimmy老师!) 1. 引言 2. 数据处理 2.1 基本处理 2.1.1 通过检查数据分布来分 ...
- ProTICS包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理)
ProTICS包的介绍(根据生信技能树Jimmy老师分享的乳腺癌分子分型包资料整理,感谢Jimmy老师!) 1.设置环境 2.Part1的结果 3.Part2的结果 4.Part3的结果 5.相关函数 ...
- 生信技能树 电脑配置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 ,里面 ...
最新文章
- linux rpm mysql 路径_linux基础-linux 下 安装 rpm 格式 的 mysql
- linux 公钥登录
- 【今晚7点半】:超低延迟下的实时合唱体验升级
- 书籍推荐-记这几年看的书
- PSPNet-tensorflow实现并训练数据
- 从ASP.NET的PHP执行速度比较谈起
- PHP知识总结(一)
- Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库
- 号称最安全的Mega网盘加密方法分析
- Python爬虫实现突破百度文库限制
- jedis的Read timed out异常解决
- PLSQL代码调试Oracle dbms_utility返回错误
- Python 计算思维训练——数组和曲线绘制练习(一)
- Python学习出来好找工作吗?好找工作的关键是什么?
- Tk应用程序:密码输入框
- GISer从零开始学习ArcGIS API for JavaScriptArcGIS Online教程(三)免费注册和使用ArcGIS Online
- Socket基本操作的C++封装--以及Socket通信实践
- CanOpen Message
- 黑马程序员 银行业务调度系统
- 薄荷英语20181103