zoukankan      html  css  js  c++  java
  • 递归,动态规划,找最短路径,Help Jimmy

    题目链接:http://poj.org/problem?id=1661

    解题报告:

    1、老鼠每次来到一块木板上都只有两条路可以走,可以使用递归

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <memory.h>
    
    #define _MAX 1010
    #define INF 0x3f3f3f3f
    
    struct Platform
    {
        int lx;//木板左端的坐标
        int rx;//木板右端的坐标
        int h;//木板距离地面的高度
    } p[_MAX];
    
    int MAX,n;
    int leftmin[_MAX];//从每条木板左端到地面的最短时间
    int rightmin[_MAX];
    
    int My_Compare(const void *e1,const void *e2)//快速排序中用到,较高的木板放在前面
    {
        struct Platform *p1,*p2;
        p1=(struct Platform*)e1;
        p2=(struct Platform*)e2;
        return p2->h-p1->h;
    }
    
    int mintime(int L,int flag)//从编号为L的木板上跳下,flag 表示将要从木板跳下的方向,flag=1时为左边跳下
    {
        int y=p[L].h;
        int i,x,ltime,rtime;
        if(flag)
            x=p[L].lx;//x为jimmy的坐标,表示来到了木板的左端
        else x=p[L].rx;
        for(i=L+1; i<=n; i++) //开始找木板
        {
            if(p[i].lx<=x&&p[i].rx>=x)
                break;
        }
        if(i<=n)//找到木板但是会摔死
        {
            if(y-p[i].h>MAX)
                return INF;
        }
        else//下面没有木块了
        {
            if(y>MAX)
                return INF;
            else return y;//没有木板直接跳下来
        }
        ltime=y-p[i].h+x-p[i].lx;
        rtime=y-p[i].h+p[i].rx-x;
        if(leftmin[i]==-1)
            leftmin[i]=mintime(i,1);
        if(rightmin[i]==-1)
            rightmin[i]=mintime(i,0);
        ltime+=leftmin[i];
        rtime+=rightmin[i];
        if(ltime<rtime)
            return ltime;
        else return rtime;
    }
    
    int main()
    {
        int i,cases,x,y;
        scanf("%d",&cases);
        while(cases--)
        {
            scanf("%d%d%d%d",&n,&x,&y,&MAX);
            memset(leftmin,-1,sizeof(leftmin));
            memset(rightmin,-1,sizeof(rightmin));
            p[0].lx=x;
            p[0].rx=x;
            p[0].h=y;
            for( i=1; i<=n; i++)
            {
                scanf("%d%d%d",&p[i].lx,&p[i].rx,&p[i].h);
            }
            qsort(p,n+1,sizeof(struct Platform),My_Compare);
            printf("%d
    ",mintime(0,1));
        }
        return 0;
    }
  • 相关阅读:
    阅读《构建之法》1-5章
    构建之法第8,9,10章
    实验5-封装与测试2
    第六次作业-my Backlog
    保存内容
    实验四-单元测试
    实验3—修改版
    做汉堡-57号
    实验3-2
    201306114357-实验3-C语言
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5205625.html
Copyright © 2011-2022 走看看