动态规划-车辆过桥问题

有N辆车要按顺序通过一个单向的小桥,由于小桥太窄,不能有两辆车并排通过,因此在桥上不能超车,另外,由于小桥建造的时间已经很久,只能承受有限的重量,记为Max(吨),即任意时刻在桥上行驶的总重量不能超过Max(吨)。因此车辆在过桥的时候必须要有控制,需将这N辆车按初始的顺序分组,每次让一个组过桥,并且只有在一个组中所有的车辆全部过桥后才让下一组车辆上桥。现已知每辆车的重量和最大速度,而每组车的过桥时间由该组中速度最慢的那辆车决定。现请设计程序,将这N辆车分组,使得全部车辆通过的时间最短。设某座桥长100m,最大承重量为100t,当有10辆车通过时的计算结果如下表所示。(本题涉及到库函数memset)
输入 输出
40 25
50 20
50 20
70 10
12 50
9 70
49 30
38 25
27 50
19 70 75.0
这是问题。我写了一个程序,但是运行不了。估计就是从开始求最优解那块有错误。
希望厉害的大牛给我点帮助,代码有注释。 谢谢大家.

#include<stdlib.h>
#include<string.h>
int main()
{
    int w[]={40,50,50,70,12,9,49,38,27,19};
    float v[]={25,20,20,10,50,70,30,25,50,70};
    int i,j,k;
    float minspeed,maxweight=100,length=100,time=0,mintime,emintime=0;
    int **weight,**speed;

    //申请一个10*10的二维数组  关于重量的,weight[a][b]表示从第a辆车到第b辆车过桥时的重量
    weight=(int **)malloc(10*sizeof(int *));
    for(i=0;i<10;i++)
        weight[i]=(int*)malloc(sizeof(int)*10);

    //申请一个10*10的二维数组  关于速度的,speed[a][b]表示从第a辆车到第b辆车过桥时的速度
    speed=(int **)malloc(10*sizeof(int *));
    for(i=0;i<10;i++)
        speed[i]=(int*)malloc(sizeof(int)*10);

    //初始化这两张表,将其值全部设置为0
    memset(weight, 0, sizeof(weight));
    memset(speed, 0, sizeof(speed));

    //给重量表赋值
    for(i=0;i<10;i++)
        for(j=i;j<10;j++)
            weight[i][j]+=w[j];
    //速度表赋值
    for(i=0;i<10;i++)
        for(j=i;j<10;j++)
        {
            if(weight[i][j]>maxweight) //重量大于100的直接将速度设置为0
            {
                speed[i][j]=0;
                continue;
            }
            minspeed=v[i];    //找出每个组的最小速度
            for(k=i;k<=j;k++)
                if(minspeed>v[k])
                    minspeed=v[k];
        }
    //开始寻找最优解
    for(i=0;i<10;i++)
    {
        for(j=i;j<10;j++)
        {
            if(speed[i][j]!=0)
            {
                time=length/speed[i][j];
                mintime=length/speed[i+1][j+1];
                for(k=j+2;k<10;k++)
                    if(speed[k-1][k]!=0&&mintime>length/speed[k-1][k])
                    {
                        mintime=length/speed[k-1][k];
                        time=time+mintime;
                    }
            }
            else
                continue;
        }
        if(emintime==0)
            emintime=mintime;
        if(emintime>mintime)
            emintime=mintime;
    }
    printf("%f",emintime);
    return 0;
}

http://wenku.baidu.com/link?url=QVqUyRte24tu8_YBpAypPBSBYpP99_dfd0R951hbtCAkzOKbISJ2FbiCA1ncScNEvVpb_1hHmNxJe3rScEfKl9OvcJKak_sFQuuqnSjUKG3