poj-1042 && nyoj-30(Gone fishing)

来源:互联网 发布:协同过滤推荐算法 java 编辑:程序博客网 时间:2024/06/05 18:45

题目链接:poj ->http://poj.org/problem?id=1042

nyoj->http://acm.nyist.net/JudgeOnline/problem.php?pid=30

题意;有n个湖,每个湖都有fi条鱼,每钓一次就会减少di条鱼,

问一个人在给定的时间内在按照从 1~n 湖中钓的鱼最多是多少,

并输出这个人在些湖中停留的时间

题解: 贪心 + 枚举

注: 枚举所有情况(即1~n的湖)每次找湖中鱼最大的

 #include<stdio.h>#include<string.h>int f1[30],f2[30];int t[30],t1[30],t2[30];int res[30];int main(){    int n,m,i,j,ret,q = 0;    int time, time1 , time2;    while(scanf("%d",&n),n)    {        scanf("%d",&m);        time = m * 60;        memset(f2,0,sizeof(f2));        for(i = 0 ; i < n; i ++)        {            scanf("%d",&f1[i]);            f2[i] = f1[i] ;        }        for(i = 0 ; i < n; i ++) scanf("%d",&res[i]);        for(i = 1; i < n;i ++) scanf("%d",&t[i]);        if(q) printf("\n");        q = 1;        int Max = -1;//这个max要小于0        memset(t2,0,sizeof(t2));        for(i = 0 ; i < n; i ++)        {            memset(t1,0,sizeof(t1));            for(j = 0; j < n ; j ++) f1[j] = f2[j];//还原            time1 = time;            for(j = 0 ; j <= i;j ++) time1 -= t[j] * 5;//去湖之间所用的时间            time2 = time1;            int sum = 0;            while(time2 > 0)            {                int max = 0;//注:这个max要等于0                int flag = 0,p=0;                for(j = 0 ; j <= i; j ++) //每次查找鱼最多的湖                {                    if(max < f1[j])                    {                        max = f1[j];                        p = j ;                        flag = 1;                    }                }                if(flag) t1[p] += 5;                sum += max ;                if(f1[p] > 0) f1[p] -= res[p] ;                time2 -= 5;            }            if(Max < sum )            {                Max = sum ;                ret = time1;                for(j = 0 ; j < n ; j ++)                    t2[j] = t1[j] ;            }        }        int ans = 0 ;        for(i = 1; i < n;i ++) ans += t2[i];        t2[0] = ret - ans ;        printf("%d",t2[0]);        for(i = 1; i < n;i ++)            printf(", %d",t2[i]);        printf("\n");        printf("Number of fish expected: %d\n",Max);    }}        



0 0
原创粉丝点击