题意:

有n个仓库,m个人,一个仓库只能由一个人托管,每个人可以托管多个仓库。

每个人有一个能力值a,如果说他托管了k个仓库,那么这些仓库的安全值都是a/k。

雇佣一个人的花费也是a。

如果一个仓库没有被人托管,那么这个仓库的安全值为0。

总安全值定义为所有仓库安全值的最小值。

现在给出人和仓库的信息,在总安全值最大的情况下,求出最小的花费。

思路:

两次dp。

dp[i][j]表示前i个人托管前j个仓库的最大的总安全度

dp[i][j] = max(dp[i-1][j],a[i]/j)

dp[i][j] = max(dp[i][j],max(min(dp[i-1][k],a[i]/k))) ,k从1到j-1。

第一个转移,前i-1个人托管了j个仓库,也可能第i个人托管了j个仓库。

第二个转移,就是前i-1个人托管了j-k个仓库,第i个人托管了k个仓库。

这样求出了最大的安全值min。

第二次dp求的是花费的最小的费用,转移与上面的类似,但是每一次都要加一个当前的总安全值大于等于min才能转移的条件。

代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = ,M = ;
const int inf = 0x3f3f3f3f;
int dp[N][M],dq[N][M];
int a[N];
int main()
{
int n,m;
while (scanf("%d%d",&n,&m) != EOF && n + m)
{
for (int i = ;i <= m;i++) scanf("%d",&a[i]);
memset(dq,inf,sizeof(dq));
memset(dp,,sizeof(dp));
for (int i = ;i <= n;i++)
{
dp[][i] = a[] / i;
}
for (int i = ;i <= m;i++)
{
for (int j = ;j <= n;j++)
{
dp[i][j] = max(dp[i-][j],a[i] / j);
int tmp = ;
for (int k = ;k < j;k++)
{
int t = min(dp[i-][j-k],a[i]/k);
tmp = max(tmp,t);
}
dp[i][j] = max(tmp,dp[i][j]);
}
}
int mn = dp[m][n];
for (int i = ;i <= n;i++)
{
if (a[] / i >= mn)
{
dq[][i] = a[];
}
}
//puts("");
for (int i = ;i <= m;i++)
{
for (int j = ;j <= n;j++)
{
if (dp[i-][j] >= mn) dq[i][j] = min(dq[i-][j],dq[i][j]);
if (a[i] / j >= mn) dq[i][j] = min(a[i],dq[i][j]);
for (int k = ;k < j;k++)
{
int t = min(dp[i-][j-k],a[i]/k);
if (t >= mn)
{
dq[i][j] = min(dq[i-][j-k] + a[i],dq[i][j]);
}
}
}
}
if (mn == )
{
puts("0 0");
}
else
{
printf("%d %d\n",mn,dq[m][n]);
}
}
return ;
}
/*
2 1
7
1 2
10 9
2 5
10 8 6 4 1 5 4 1 1 1 1 0 0
*/

uva 10163 Storage Keepers的更多相关文章

  1. UVA 10163 Storage Keepers(两次DP)

    UVA 10163 Storage Keepers(两次DP) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Ite ...

  2. DP(两次) UVA 10163 Storage Keepers

    题目传送门 /* 题意:(我懒得写,照搬网上的)有n个仓库,m个人看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人有一个能力值pi,如果他看管k个仓库,那么所看管的每个仓库的安全值为 ...

  3. uva 10163 - Storage Keepers(01背包)

    题目链接:10163 - Storage Keepers 题目大意:给出m为仓库的数量, 给出n为有守夜人的数量, 然后给出n个数值,为对应守夜人应付的酬劳,每个守夜人的能力与他需要的酬劳是相等的,并 ...

  4. UVA 10163 Storage Keepers(dp + 背包)

    Problem C.Storage Keepers  Background Randy Company has N (1<=N<=100) storages. Company wants ...

  5. UVa 10163 Storage Keepers (二分 + DP)

    题意:有n个仓库,m个管理员,每个管理员有一个能力值P,每个仓库只能由一个管理员看管,但是每个管理员可以看管k个仓库(但是这个仓库分配到的安全值只有p/k,k=0,1,...),雇用的管理员的工资即为 ...

  6. UVA 10163 - Storage Keepers(dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题意 有n个仓库,让m个人来看管.一个仓库只能由一个人来看管,一个人可以看管多个仓库. 每个人 ...

  7. UVA 10163 十六 Storage Keepers

    十六 Storage Keepers Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit ...

  8. 【Uva 10163】Storage Keepers

    [Link]: [Description] 你有n(n≤100)个相同的仓库.有m(m≤30)个人应聘守卫,第i个应聘者的能力值 为Pi(1≤Pi≤1000).每个仓库只能有一个守卫,但一个守卫可以看 ...

  9. UVA-10163 Storage Keepers DP

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

随机推荐

  1. springmvc shiro整合cas单点登入

    shiro cas分为登入跟登出 maven依赖: <dependency> <groupId>org.apache.shiro</groupId> <art ...

  2. mysql分库 分表

    原文链接:http://www.jianshu.com/p/89311703b320 传统的分库分表传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都是普通的表和库.分库分库的原因 首先, ...

  3. MUI框架a链接href跳转失效解决方法,解决MUI页面不会滚动的方法

    //解决 所有a标签 导航不能跳转页面 mui('body').on('tap','a',function(){document.location.href=this.href;}); //解决MUI ...

  4. Python开发【模块】:aiohttp(一)

    AIOHTTP 用于asyncio和Python的异步HTTP客户端/服务器 主要特点: 支持客户端和HTTP服务器. 支持服务器WebSockets和 客户端WebSockets开箱即用,没有回调地 ...

  5. 数据库级别DML操作监控审计、表触发器/对象触发器

    使用触发器记录DML,使用触发器记录表的DML 数据库级别DML操作监控审计.表触发器/对象触发器 --创建记录表 CREATE TABLE T_SHALL_LOG ( ID , ) , EVTIME ...

  6. OC照片选择器MJPhotoBrowser

    图片选择器,看cocoachina发现一个有趣的框架,很好用,分享一下,其实做出该功能我之前写过一篇博客,使用转场动画写的,就是图片的手势缩放没写,有兴趣可以看看 效果图: github地址:http ...

  7. redgate的mysql架构比较和数据比较工具

    redgate的mysql架构比较和数据比较工具 最近线上数据需要进行架构比较,比较两个服务器上的mysql实例上数据库的架构 数据比较可以用percona的pt-table-checksum和pt- ...

  8. windows系统redmine安装总结

    今天在公司服务器上安装了redmine,主要用于项目管理和缺陷跟踪.安装过程比较简单,总结如下: 1.网上下载redmine安装包(bitnami-redmine-3.3.1-0-windows-in ...

  9. python类型错误:can only concatenate list (not "str") to list

    TypeError:can only concatenate list (not "str") to list: 类型错误:只能将list类型和list类型联系起来,而不是str类 ...

  10. 004-js-md5

    参看地址:https://www.bootcdn.cn/blueimp-md5/