题意:

有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. Scala笔记

    定义包 package com.runoob { class HelloWorld } 引用包 import java.awt.Color // 引入Color import java.awt._ / ...

  2. es分布式文档系统_bulk api的奇特json格式与底层性能优化关系

    1.bulk api奇特的json格式{"action":{"meta"}}\n{"data"}\n{"action": ...

  3. spring mvc 资源映射配置

    在springmvc配置文件中添加 <mvc:resources location="/css/" mapping="/css/**"/> < ...

  4. “我的小程序”来了 新版微信v6.7.1下拉就能找到

    今天iOS版微信迎来v6.7.1正式版发布,本次升级主要是可以把常用的小程序添加到“我的小程序”.近期版本微信可以直接浏览订阅号的消息,扫一扫可拍照翻译整页中英文,浏览的文章支持缩小为浮窗.两大更新如 ...

  5. 设置帝国cms文章标题 真正符合百度建站标准

    百度建站指南中有提到内容页的标题设置,标题描述清晰最好包含主站和频道信息:内容标题_频道名称_网站名称.帝国cms文章标题一般默认是内容标题_网站名称,那么如何调用当前文章的频道名称(分类名称)呢? ...

  6. vs 2017 集成python

    官网:https://docs.microsoft.com/en-us/visualstudio/python/installation

  7. chkdsk 命令对Raid盘检测和查错、修复

    C:\Documents and Settings\Administrator>chkdsk /?检查磁盘并显示状态报告. CHKDSK [volume[[path]filename]]] [/ ...

  8. 反射入门-浅谈反射用途_根据Ado游标对象创建list集合

    本人大二菜鸟一只,今天在上课期间有个同学看着C#反射的内容说反射没什么用,一时之间也想不到什么更好的例子,就写了个根据泛型类型和游标反射创建List集合的Demo. 首先创建一个用于封装对应数据的en ...

  9. LigerUi折叠与展开

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  10. Openvpn配置文件详解

    一.vars配置文件 vars配置文件的主要内容如下: cat vars |grep -vE "^#|^$" KEY_DIR定义key生成的目录. KEY_SIZE定义生成私钥的大 ...