题目大意:有n个仓库,m个应聘者,每人对应一个能力值。一个人可以看多个仓库,一间仓库只能被一个人看。如果一个能力为p的人看k间仓库,那么安全系数为p/k,求出最大的最小安全系数,并且求出在此情况下所有人的能力值总和。

题目分析:这道题比较灵活,可以另仓库总数作为背包容量,也可以用应聘者总数作为背包容量。最后,求能力值总和时还需要再DP一次。

代码如下:

# include<iostream>
# include<cstring>
# include<cstdio>
# include<algorithm>
using namespace std; const int INF=1000000000; int n,m,p[35];
int dp[105][35]; int main()
{
while(scanf("%d%d",&n,&m)&&n+m)
{
for(int i=1;i<=m;++i)
scanf("%d",p+i); memset(dp,0,sizeof(dp));
for(int i=0;i<=m;++i) dp[0][i]=INF;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
dp[i][j]=dp[i][j-1];
for(int k=1;k<=i;++k)
dp[i][j]=max(min(dp[i-k][j-1],p[j]/k),dp[i][j]);
}
}
printf("%d ",dp[n][m]);
int ans1=dp[n][m];
if(ans1==0){
printf("0\n");
continue;
} memset(dp,0,sizeof(dp));
for(int i=1;i<=n;++i) dp[i][0]=INF;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
dp[i][j]=dp[i][j-1];
for(int k=1;k<=i;++k)
if(p[j]/k>=ans1)
dp[i][j]=min(dp[i][j],dp[i-k][j-1]+p[j]);
}
}
printf("%d\n",dp[n][m]);
}
return 0;
}

  

UVA-10163 Storage Keepers (0-1背包)的更多相关文章

  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

    题意: 有n个仓库,m个人,一个仓库只能由一个人托管,每个人可以托管多个仓库. 每个人有一个能力值a,如果说他托管了k个仓库,那么这些仓库的安全值都是a/k. 雇佣一个人的花费也是a. 如果一个仓库没 ...

  7. UVA 10163 - Storage Keepers(dp)

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

  8. UVA 10163 十六 Storage Keepers

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

  9. poj1417 带权并查集+0/1背包

    题意:有一个岛上住着一些神和魔,并且已知神和魔的数量,现在已知神总是说真话,魔总是说假话,有 n 个询问,问某个神或魔(身份未知),问题是问某个是神还是魔,根据他们的回答,问是否能够确定哪些是神哪些是 ...

  10. P1417 烹调方案 (0/1背包+贪心)

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

随机推荐

  1. Jmeter--正则表达式提取器

    正则提取器的一般使用场景是, 在我第二个请求参数中需要加入第一个请求的返回值, 此时通过正则提取器可以提取第一个请求返回值中指定的字段信息并赋值, 在第二个请求参数中直接引用该变量即可 jmeter的 ...

  2. Django框架介绍之一

    这片博文就是对django有个大概的了解,通俗的说,就是先让django跑起来. django安装 在linux上安装如下: 源码安装: tar -zxvf Django-1.9.13.tar.gz ...

  3. STM32各个文件介绍、uCOSII文件介绍

    (1)core_cm3.c , core_cm.h:获取设置CM3内核,配置一些内核寄存器,用到CM3核的都需要: (2)stm32f10x.h 和 system_stm32f10x.c , syst ...

  4. BIOS、MBR、UEFI和GPT关系

    很多用户在新买电脑,或是给已有电脑重装系统时都出现过怎么都无法引导U盘安装的情况.究其原因,还是没能搞清楚BIOS.MBR.UEFI和GPT的复杂关系.所以,今天小编就和大家分享一下它们之间的爱恨情仇 ...

  5. linux下kermit工具的使用

    1.环境: ubuntu16.04 2.背景: 想更换下位机内核 3.使用kermit进行串口传输 举例:传输文件到下位机 2.1首先进入下位机的uboot 2.2 使用uboot自带的命令从串口接收 ...

  6. POJ2528 Mayor's posters(线段树&区间更新+离散化)题解

    题意:给一个区间,表示这个区间贴了一张海报,后贴的会覆盖前面的,问最后能看到几张海报. 思路: 之前就不会离散化,先讲一下离散化:这里离散化的原理是:先把每个端点值都放到一个数组中并除重+排序,我们就 ...

  7. centos7 + mysql5.7 tar包解压安装

    #卸载系统自带的Mariadb [root@hdp265dnsnfs ~]# rpm -qa|grep mariadb mariadb-libs--.el7.centos.x86_64 [root@h ...

  8. 使用PDFminer3k解析pdf为文字遇到:WARING:root:GBK-EUC-H

    最近需要把PDF解析为文字,查了查python的模块,发现PDFminer3k能满足需求.我使用的是 windows平台下的python3.6,python2的则下载pdfminer. 首先下载:直接 ...

  9. [shiro] - 加入rememberMe功能

    shiro不加入rememberMe没事,一加入就出错. RememberMeAuthenticationToken : public interface RememberMeAuthenticati ...

  10. 解决 mininet gave up after 3 retries 问题

    解决 mininet gave up after 3 retries 问题 在通过mn启动mininet的时候遇到了如下问题: *** Creating network *** Adding cont ...