poj解题报告——1042

来源:互联网 发布:天猫是属于淘宝的吗 编辑:程序博客网 时间:2024/04/30 05:10

        本题是一道贪心算法

        贪心方法:

       1. 枚举到的最远的一个湖泊,首先算好路上的总共时间(路程);

        2.接着算出剩余钓鱼次数k.

        3.设dij表示第i个湖泊第j次钓能钓到多少,算出前x个湖泊的所有情况

        4.排序取前k个相加 再把时间加上就是答案.


#include<iostream>#include<string>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;struct node{    int t;    int n;}a[5000000];int f[50],d[50],t[50];int time[50],tmp[50];int n,h,r;bool cmp(node a,node b){    if(a.t==b.t)        return a.n<b.n;    return a.t>b.t;}int main(){    bool fg=0;int i;    while(scanf("%d",&n)&&n)    {        if(fg)printf("\n");        fg=1;        scanf("%d",&h);        for(i=0;i<n;i++)            scanf("%d",&f[i]);        for(i=0;i<n;i++)            scanf("%d",&d[i]);        for(i=0;i<n-1;i++)            scanf("%d",&t[i]);        int p,k,tt,tpa,ans;        p=0,ans=-1;        r=h*60;        for(i=0;i<r;i++)        {            a[p].t=0;            a[p++].n=0;        }        memset(time,0,sizeof(time));        for(i=0;i<n;i++)        {            if(i!=0)            {                if(r-t[i-1]*5>=0)                    r-=(t[i-1]*5);                else                    break;            }            k=r/5,tt=tpa=0;            if(d[i]==0)            {                for(int j=0;j<k;j++)                {                    a[p].t=f[i];                    a[p++].n=i;                }            }            else            {                while(f[i]-d[i]*tt>0)                {                    a[p].t=f[i]-d[i]*tt;                    a[p++].n=i;                    tt++;                }            }            sort(a,a+p,cmp);            memset(tmp,0,sizeof(tmp));            for(int j=0;j<k&&j<p;j++)            {                tmp[a[j].n]+=5;                tpa+=a[j].t;            }            if(tpa>ans)            {                memcpy(time,tmp,sizeof(tmp));                ans=tpa;            }        }        for(int i=0;i<n;i++)            printf("%d%s",time[i],i!=n-1?", ":"\n");        printf("Number of fish expected: %d\n",ans);    }    return 0;}


0 0
原创粉丝点击