View Code of Problem 3565

#include <stdio.h>

 

int n;

int h;

int fi[30];

int di[30];

int cfi[30];

int ti[30];

 

struct LAKENODE

{

    int num[30];

    int max;

}lake[30];

 

int GetMax(int p[], int i, int j)

{

    int cmax = p[i], loc = i;

    for (int m = i + 1; m <= j; m++)

    {

        if (cmax < p[m])

        {

            cmax = p[m];

            loc = m;

        }

    }

    return loc;

}

 

void GetFish()

{

    int i, j;

    int T = h * 60, t, CT;

    for(i = 1; i <= n; i++)

    {

        lake[i].max = 0;

        for(int j = 1; j <= n; j++)

        {

            lake[i].num[j] = 0;

        }

    }

    for (i = 1;i <= n; i++)

    {

        CT = T;

        t = 0;

        for (j = 1; j <= i; j++)

        {

            cfi[j] = fi[j];

            CT = (j < i) ? CT - ti[j] * 5 : CT;

        }

        while (t < CT)

        {

            int k = GetMax(cfi, 1, i);

            lake[i].max += cfi[k];//钓鱼总量增加在k湖一个单位时间钓到的鱼

            lake[i].num[k] += 5;//停在k湖的时间增加一个单位时间

            cfi[k] >= di[k] ? cfi[k] -= di[k] : cfi[k] = 0;//修改第k个湖在下一个时间单位中所能钓到的鱼

            t += 5;

        }

    }

    for (i = 1; i <= n; i++)//将最大值拷贝到cfi数组中,用于查询真正最大值

    {

        cfi[i] = lake[i].max;

    }

    int la = GetMax(cfi, 1, n);

    for (i = 1; i <= n; i++)

    {

        (i != n) ? printf("%d, ", lake[la].num[i]) : printf("%d", lake[la].num[i]);

    }

    printf("\nNumber of fish expected: %d\n\n", lake[la].max);

}

 

int main()

{

    int i;

    while (scanf("%d", &n) && n)

    {

        scanf("%d", &h);

        for (i = 1; i <= n; i++)
		   scanf("%d", &fi[i]);

     

        for (i = 1; i <= n; i++)   
            scanf("%d", &di[i]);

      

        for (i = 1; i < n; i++)
            scanf("%d", &ti[i]);

       

        GetFish();

    }

    return 0;

}

Double click to view unformatted code.


Back to problem 3565