uva757 - Gone Fishing

来源:互联网 发布:淘宝客设置佣金比例 编辑:程序博客网 时间:2024/04/29 19:32

搞了一下午的题目,,,

开始的时候虽然把特殊情况列出来了,(最后答案为0)但是还是错在上面了

犯错的地方我已在代码中标识了出来,,

思路吗,主要是贪心,,

假设在前x个池塘就能得到最大鱼数,,

然后让x从1到n遍历,,,,

这样就避免了路上时间的重复。。从而在目前情况下达到最优。。。。

在我看来难点是怎么 题意把转化成自己清晰的思路。

代码如下:

#include <cstdio>#define M 30int n, h, f[M], d[M], t[M], ans[M], te[M];int maxi (int a, int b, int *A){    int ans = 0;    for(int i = a; i <= b; i++) if(A[ans]<A[i])    ans = i;    return ans;}int solve(int m){    int tmax = h*12-t[m];    int tf[M];    for(int i = 0; i < n; i++) {tf[i] = f[i]; te[i] = 0;}    int ans = 0;    int time = 0;    while(time<tmax)    {        int ti = maxi(0,m,tf);        if(tf[ti]<=0) break;        ans+=tf[ti];        tf[ti]-=d[ti];        te[ti]++;        time++;    }    if(time<tmax) te[0]+=tmax-time;    return ans;}int main (){    int tt = 0;    while(scanf("%d",&n),n)    {        scanf("%d",&h);        for(int i = 0; i < n; i++) scanf("%d",&f[i]);        for(int i = 0; i < n; i++) scanf("%d",&d[i]);        int temp;        t[0] = 0;        for(int i = 1; i < n; i++) {scanf("%d",&temp); t[i] = temp+t[i-1];}        int max = -1, _ans;//注意max的初始值,不可以为零哦!!        for(int i = 0; i < n; i++)        {            _ans = solve(i);            if(max<_ans)            {                max = _ans;                for(int i = 0; i < n; i++) ans[i] = te[i];            }        }        if(tt++) printf("\n");        for(int i = 0; i < n; i++) i==0?printf("%d",ans[i]*5):printf(", %d",ans[i]*5);        printf("\nNumber of fish expected: %d\n",max);    }    return 0;}




原创粉丝点击