• HDU 4175 Class Schedule


    今年三月份的选拔赛的题目,也是我出的最后一题,当时很快就完成了,但是今天一做就是3小时了。贡献了wa不少

    题意:一共有C种课程,每个课程都有T节课。C1,C2,C3..Cn的不同类的课连续上,而且同一种课的不同class是一个时间上的

    问最后去到L点是最小消耗是多少

    1.每移动到另外一个课室位置pos时,都消耗abs(位置差)的能量值,上每一节课就花费在当前点的能量值

    2.绝对只能暴力,从数据上分析是不行的,25*1000*1000,超过理论限制,但是杭电数据水点。62水过就行。

    3.今天是用一个位置数据记录状态转移的,每次都从上次状态转移到当前状态,并记录当前值。但是后来用一组数据测试wa掉了。

    4.代码采用dp[][]方法记录当前状态的i,j,分别表示为第几节,第几个课室地点。上面的问题就没了。

    附加测试数据,最后一组应该可以刷出不少问题来。

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    #define maxn 1000010
    int d[30][1010] , pos[30][1010] , eg[30][1010];
    int C,T,L;
    #define inf 200000100
    
    int nw,fm,fk,tmp,kx , kp;
    int main()
    {
        int Tx;
        int i,j,k,mink;
        scanf("%d",&Tx);
        while(Tx--)
        {
            memset(pos,0,sizeof(pos));
            memset(eg,0,sizeof(eg));
            scanf("%d %d %d",&C,&T,&L);
            for(i=1;i<=C;i++) //position
            {
                for(j=1;j<=T;j++) // energy
                {
                    scanf("%d %d",&pos[i][j],&eg[i][j]);
                }
            }
            memset(d,0,sizeof(d));
            for(i=1;i<=C;i++)
            {
                for(j=1;j<=T;j++)
                {
                    tmp = inf;
                    for(k=1;k<=T;k++)
                    {
                        //nw = pos[i][j];fm = pos[i-1][k];
                        d[i][j] = abs(pos[i-1][k]-pos[i][j])
                             + d[i-1][k] + eg[i][j];
                        if(d[i][j] < tmp)
                        {
                            tmp = d[i][j];
                        }
                    }
                    d[i][j] = tmp;
                }
            }
            mink = inf;
            for(i=1;i<=T;i++)
            {
                kx = d[C][i] + abs(pos[C][i]-L);
                if(kx < mink) mink = kx;
            }
            printf("%d
    ",mink);
        }
        return 0;
    }
    /*
    10
    3 2 5
    2 1
    3 1
    4 1
    1 3
    1 4
    3 2
    
    3 2 7
    2 2
    4 3
    5 6
    4 5
    2 4
    3 8
    
    7
    4 6 30
    6 3
    7 8
    2 15
    10 1
    9 2
    3 17
    30 30
    27 10
    10 40
    23 30
    11 46
    1 12
    1 7
    30 1
    25 14
    3 10
    11 8
    10 2
    13 4
    15 9
    11 3
    23 7
    13 4
    1 10
    ---------------------60!
    wa ------------------63!
    */
    View Code

    上着无聊的软件工程时,突然想到了今天为何wa得那么苦了,原来用d[1000000]表示每一个点的当前状态时,在发生转移的时候,数据变动会将原来的状态覆盖掉。好吧,样例万能,一开始就觉得如果用这种记录方法肯定死得很惨。mark一个先。

  • 相关阅读:
    git技能
    iOS 命名规则
    iOS crash 报错类型
    iOS 面试相关
    【转】app后端如何选择合适的数据库产品
    App的token机制
    【转】Spring注解详解
    spring mvc ModelAndView 404的原因
    ibatis 环境搭建(1)
    Android中的Selector的用法
  • 原文地址:https://www.cnblogs.com/cton/p/3443013.html
Copyright © 2020-2023  润新知