zoukankan      html  css  js  c++  java
  • UVa 10163 Storage Keepers(两次DP)

     题意:

    有n个仓库(最多100个),m个管理员(最多30个),每个管理员有一个能力值P(接下来的一行有m个数,表示每个管理员的能力值)

    每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),

    每个月公司都要给看管员工资,雇用的管理员的工资即为他们的能力值p和,问,使每个仓库的安全值最高的前提下,使的工资总和最小。

    输出最大安全值,并且输出最少的花费。

    思路:

    题目有个限制是:所有物品里面最小的那个安全值即是总的安全值。

    第一个dp[i, j] : 前i个人照看前j个物品的最大安全值。

    第二个dp[i, j] : 在得到最大安全值的前提下前i个人照看前j个物品的最少花费。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int MAXN = 110;
    const int MAXM = 40;
    const int INF = 0x3f3f3f3f;
    int n, m, dp[MAXM][MAXN], p[MAXM];
    int L, Y;
    
    bool solve()
    {
        for (int i = 0; i <= m; ++i)
            dp[i][0] = INF;
        for (int i = 1; i <= n; ++i)
            dp[0][i] = 0;
    
        for (int i = 1; i <= m; ++i)
            for (int j = 1; j <= n; ++j)
            {
                dp[i][j] = dp[i-1][j];
                for (int k = 0; k < j; ++k)
                    dp[i][j] = max(dp[i][j], min(dp[i-1][k], p[i]/(j-k)));
            }
    
        if (dp[m][n])
            L = dp[m][n];
        else
            return false;
    
        for (int i = 0; i <= m; ++i)
            dp[i][0] = 0;
        for (int i = 1; i <= n; ++i)
            dp[0][i] = INF;
    
        for (int i = 1; i <= m; ++i)
            for (int j = 1; j <= n; ++j)
            {
                dp[i][j] = dp[i-1][j];
                for (int k = 0; k < j; ++k)
                    if (p[i]/(j-k) >= L)
                        dp[i][j] = min(dp[i][j], dp[i-1][k] + p[i]);
            }
        Y = dp[m][n];
        return true;
    }
    
    int main()
    {
        while (scanf("%d %d", &n, &m) && n && m)
        {
            for (int i = 1; i <= m; ++i)
                scanf("%d", &p[i]);
    
            if (solve())
                printf("%d %d\n", L, Y);
            else
                printf("0 0\n");
        }
        return 0;
    }
    -------------------------------------------------------

    kedebug

    Department of Computer Science and Engineering,

    Shanghai Jiao Tong University

    E-mail: kedebug0@gmail.com

    GitHub: http://github.com/kedebug

    -------------------------------------------------------

  • 相关阅读:
    学习摘录2
    实用的html代码
    使用jdom创建xml
    常用eclipse插件地址
    java连接各种数据库 代码
    spring mvc框架 web.xml配置文件 Could not open ServletContext resource [/WEBINF/classes/springservlet.xml] 错误
    第一次添加随笔,哈哈
    WordPress Live Chat – WordPress即时聊天插件
    70个非常酷和时尚的iOS应用程序图标
    20个强大的jQuery翻书插件【 jQuery flipbook】
  • 原文地址:https://www.cnblogs.com/kedebug/p/2790124.html
Copyright © 2011-2022 走看看