757 - Gone Fishing

描述:暴力+贪心,先定向选择依次只能到达第一个湖、第二个湖……最后一个湖,就会变成选择最优解问题,选择和最大的就可以了,注意有可能数据都是为零的时候,这是把所有的时间都用在第一个湖就可以了

#include <cstdio>

#include <cstring>

int main()

{

   // freopen("a.txt","r",stdin);

    int t[30],f[30],d[30],s[30];

    int h,n,count,p=0;

    while(scanf("%d",&n)!=EOF)

    {

        if(!n) break;

        if(p) printf("\n");

        scanf("%d",&h);

        h*=60;

        for(int i=0; i<n; i++) scanf("%d",&f[i]);

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

        count=t[0]=0;

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

        {

            scanf("%d",&t[i]);

            t[i]=t[i]*5+t[i-1];

        }

        memset(s,0,sizeof(s));

        for(int i=0; i<n; i++)

        {

            int leave=h-t[i];

            if(leave<5) break;

            int sum=0,pos=0,temp[30],m[30],flag,c;

            for(int j=0; j<=i; j++)

            {

                m[j]=f[j];

                temp[j]=0;

            }

            while(leave>=5)

            {

                flag=c=0;

                for(int j=0; j<=i; j++)

                    if(m[j]>c)

                    {

                        c=m[j];

                        pos=j;

                        flag=1;

                    }

                if(!flag) break;

                temp[pos]+=5;

                sum+=c;

                m[pos]-=d[pos];

                leave-=5;

            }

            if(leave>=5) temp[0]+=leave;

            if(sum>count)

            {

                count=sum;

                for(int j=0; j<=i; j++) s[j]=temp[j];

            }

        }

        if(!count) s[0]=h;

        printf("%d",s[0]);

        for(int i=1; i<n; i++) printf(", %d",s[i]);

        printf("\nNumber of fish expected: %d\n",count);

        p++;

    }

    return 0;

}


你可能感兴趣的:(one)