zoukankan      html  css  js  c++  java
  • 百度2015 在线笔试题(3)

    题目

    关键字:兼职问题

    小明需要通过做兼职挣钱,他一天有k点体力,每连续做一次兼职都会消耗1点体力;

    现在有n份兼职,按照时间排序,且互不交叉,给定n份兼职的薪水,小明可以每次挑选m份连续的兼职做;

    问他一天得到的最大薪水?

    分析

    寻找k次 最大字段和(m个)问题!

    程序设计

    #include <iostream>
    #include <cstdlib>
    #include <vector>
    
    using namespace std;
    
    int MaxPay(vector<int> &p, int n, int m, int k)
    {
        int maxPay = 0;
    
        if (m*k >= n)
        {
            int ret = 0;
            for (int i = 0; i < k; i++)
                ret += p[i];
            return ret;
        }
    
        //选过的兼职不可再选
        int flag = -1;
        //k次连续m兼职最大费用
        vector<int> v;
        //挑选k次
        int c = 0;
        while (c < k)
        {
            maxPay = 0;
            int l = 0;
            for (int i = 0; i < n - m + 1 ; i++)
            {
                //每次挑选m个时间连续的兼职
                int sum = 0;
                for (int j = i;  p[i] != flag && j < i + m; j++)
                {
                    sum += p[j];
                }//for
                if (sum > maxPay)
                {
                    maxPay = sum;
                    l = i;          
                }//if           
            }//for
            v.push_back(maxPay);
            for (int j = l; j < l + m; j++)
            {
                p[j] = flag;
            }//for
            c++;
        }//while
    
        int ret = 0;
        for (int i = 0; i < k; i++)
            ret += v[i];
        return ret;
    }
    
    int main()
    {
        int n, m, k;
        cin >> n >> m >> k;
        vector<int> v;
    
        for (int i = 0; i < n; i++)
        {
            int temp;
            cin >> temp;
            v.push_back(temp);
        }//for
        cout << MaxPay(v, n, m, k) << endl;
        system("pause");
        return 0;
    }

    注:题目是听朋友描述,记录下来,日后参考!

  • 相关阅读:
    【LeetCode OJ】Remove Element
    【LeetCode OJ】Remove Duplicates from Sorted Array
    【LeetCode OJ】Swap Nodes in Pairs
    【LeetCode OJ】Merge Two Sorted Lists
    【LeetCode OJ】Remove Nth Node From End of List
    【LeetCode OJ】Two Sum
    【LeetCode OJ】Majority Element
    最长公共子序列问题
    php fopen与file_get_contents的区别
    PHP 技巧集合
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214852.html
Copyright © 2011-2022 走看看