zoukankan      html  css  js  c++  java
  • Gone fish 1042

    //By XieJiang 2017/03/15-2017/03/16
    //Gone Fishing 1042
    //策略,采取贪心:每次选取鱼最多的池塘
    //贪心+枚举,也是参考了别人的博客CIA明白的,DP也可以,无奈水平实在太渣
    #include<iostream>
    using namespace std;
    int n, h;//记录池塘数量,允许小时数
    int fish[26][26], ftime[26][26], f[26], d[26], t[25];//最终每个池塘的捕鱼数,池塘的花费的时间,池塘初始鱼数,下降比例,池塘之间的时间
    int ans[26];//贪心下,总的鱼数量
    
    int main() {
        int i, j, tn, th, emp, maxfish, maxschme, tf[26];
        cin >> n;
        while (n > 0) {
            cin >> h;
            h = h * 12;
            memset(ans, 0, sizeof(ans));
            memset(ftime, 0, sizeof(ftime)); memset(fish, 0, sizeof(ftime));
            for (i = 1; i <= n; i++)//输入每个池塘的鱼数量
                cin >> f[i];
            for (i = 1; i <= n; i++)//输入每个池塘每五分钟下降的鱼数量
                cin >> d[i];
            for (i = 1; i < n; i++)//输入相邻间隔池塘的路上花费的时间
                cin >> t[i];
            //开始枚举(从1到n)
            for (tn = 1; tn <= n; tn++) {
                //目前要垂钓的湖的范围是1-tn
                //计算路上花费的时间
                th = h;
                for (i = 1; i < tn; i++)
                    th -= t[i];
                //将f[26]复制到一个临时的数组内,用以一次枚举过程
                for (i = 1; i <= tn; i++)
                    tf[i] = f[i];
                //模拟垂钓过程,结束条件:湖空或者时间用光,同时剩余时间放入第一个湖。
                emp = 0;
                while (th > 0 && emp < tn) {
                    //选择鱼最多的池塘
                    maxfish = 1;
                    for (i = 2; i <= tn; i++)
                        if (tf[i] > tf[maxfish])
                            maxfish = i;
                    if (tf[maxfish] <= 0)
                        break;
                    //表示下一次将选择这个池塘,将相关信息去除。
                    ans[tn] += tf[maxfish];
                    tf[maxfish] -= d[maxfish];
                    ftime[tn][maxfish]++;
                    th--;
                    //判断空的湖
                    if (tf[maxfish] <= 0)
                        emp++;
                }
                //将剩余未完时间归于湖1
                if (th > 0)
                    ftime[tn][1] += th;
    
            }
            //选出鱼数量最多的方案
            maxschme = 1;
            for (i = 2; i <= n; i++) 
                if (ans[i] > ans[maxschme])
                    maxschme = i;
            //输出结果
            for (i = 1; i < n; i++)
                cout << ftime[maxschme][i]*5 << ", ";
            cout << ftime[maxschme][n]*5 << endl;
            cout << "Number of fish expected: " << ans[maxschme] << endl;
            cin >> n;
            if (n != 0)
                cout << endl;
        }
    }
  • 相关阅读:
    湖南省第6届程序大赛第6题 Biggest Number
    湖南省第6届程序大赛第5题 内部收益率
    湖南省第6届程序大赛第4题 台球碰撞
    湖南省第6届程序大赛第3题 数字整除
    湖南省第6届程序大赛第二题 弟弟的作业
    湖南省第6届程序设计大赛第一题 汽水瓶
    Nginx 负载均衡配置
    Nginx 反向代理流程
    Nginx 对客户端请求的特殊处理
    Nginx文件操作的优化
  • 原文地址:https://www.cnblogs.com/1996313xjf/p/6558986.html
Copyright © 2011-2022 走看看