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\n",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一个先。

 

posted on 2013-11-26 12:11  从此以后  阅读(354)  评论(0编辑  收藏  举报