POJ1042解题报告,很简单的贪心枚举

来源:互联网 发布:ssm项目管理系统源码 编辑:程序博客网 时间:2024/06/08 02:12

POJ 1042题目,老师布置的作业,用枚举和贪心来做,其实很简单,只是觉得枚举实在是...一直在想好办法,但是很令人失望,没有想出来,

题目意思是 给出了单位时间(5 min)可以钓到的鱼,每次在一个湖里钓鱼,都会使得下次单位时间钓到鱼数量变少,然后给定了时间。

可以改变钓鱼的位置,但只能从湖i到湖i+1

枚举就是假设从第一个湖开始,到第k个湖的情况,让k从1到N遍历一遍求出最多的鱼

每一次当中就用贪心策略,就是每次选出当前钓鱼数量最多的湖,大家或许有疑问,那样的话,不就有可能先从后面的湖里钓鱼,再从前面的钓鱼吗

其实贪心求出的只是要求时间内的策略

你是可以把贪心解的顺序进行调整到顺序而且不改变它的效益的,是不是很简单?代码附上

#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#define Max 105#define Inf 1<<30int fish[Max],dec[Max],cost[Max];int time,n,best,aim[Max];int now,cfish[Max],ctime,record[Max];/*void Print(int *a){    for(int i=0;i<n;i++) printf("%d ",*(a+i));    printf("\n");}            Print(cfish);            Print(fish);*/int main(){    int i;    while(true){        scanf("%d",&n);        if(!n) break;        scanf("%d",&time);        time = time * 12;        best = -1;        for(i=0;i<n;i++) scanf("%d",&fish[i]);        for(i=0;i<n;i++) scanf("%d",&dec[i]);        for(i=0;i<n-1;i++) scanf("%d",&cost[i]);        for(i=0;i<n;i++){            now = 0;            ctime = time;            memcpy(cfish,fish,sizeof(int)*n);            memset(record,0,sizeof(int)*n);            for(int k=0;k<i;k++) ctime = ctime - cost[k];            while(ctime > 0){                ctime --;                int ch,num;                num = -1;                for(int j=0;j<=i;j++){                    if(cfish[j]>num){                        ch = j;                        num = cfish[j];                    }                    if(cfish[j]<0){                        cfish[j] = 0;                    }                }                now = now + num;                record[ch]++;                cfish[ch] = cfish[ch] - dec[ch];                if(cfish[ch]<0) cfish[ch] = 0;            }            if(best < now){                best = now;                memcpy(aim,record,sizeof(int)*n);            }        }        for(i=0;i<n-1;i++) printf("%d, ",aim[i]*5);        printf("%d\n",aim[n-1]*5);        printf("Number of fish expected: %d\n\n",best);    }    return 0;}


0 0
原创粉丝点击