题目传送门

 /*
题意:(我懒得写,照搬网上的)有n个仓库,m个人看管。一个仓库只能由一个人来看管,一个人可以看管多个仓库。
每个人有一个能力值pi,如果他看管k个仓库,那么所看管的每个仓库的安全值为 pi/k(向下取整)
如果某个仓库没有人看管,那么它的安全值为0。所有仓库的安全值L = min{ 每个仓库的安全值 }
从m个人中选择一些人雇佣,问所有仓库的安全值最高是多少,在安全值最高的情况下,求雇佣(能力值)的最少价钱。
DP(两次):dp[i][j]表示前i个人管理j个仓库的最大安全值,那么dp[i][j] = max (dp[i-1][j-k], p[i] / k) (k是当前选择的仓库数)
在保障最大安全值下选择最小花费,也就是:p[i] / k >= dp[m][n]下,dp2[i][j]表示前i个人管理了j个仓库所需最小花费
这题我想了一上午,同时考虑安全值和花费的最优,结果越弄越乱,依据题意应该安全第一!
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-16 9:59:59
* File Name :UVA_10163.cpp
************************************************/ #include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e2 + ;
const int MAXM = ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
int dp[MAXM][MAXN], dp2[MAXM][MAXN];
int p[MAXM]; int main(void) { //UVA 10163 Storage Keepers
int n, m;
while (scanf ("%d%d", &n, &m) == ) {
if (!n && !m) break;
for (int i=; i<=m; ++i) scanf ("%d", &p[i]);
memset (dp, , sizeof (dp));
for (int i=; i<=m; ++i) {
dp[i-][] = INF;
for (int j=; j<=n; ++j) {
dp[i][j] = dp[i-][j];
for (int k=; k<=j; ++k) {
dp[i][j] = max (dp[i][j], min (dp[i-][j-k], p[i] / k));
}
}
}
memset (dp2, INF, sizeof (dp2));
for (int i=; i<=m; ++i) {
dp2[i-][] = ;
for (int j=; j<=n; ++j) {
dp2[i][j] = dp2[i-][j];
for (int k=; k<=j; ++k) {
int s = p[i] / k;
if (s >= dp[m][n]) {
dp2[i][j] = min (dp2[i][j], dp2[i-][j-k] + p[i]);
}
}
}
} printf ("%d %d\n", dp[m][n], (dp[m][n] == ) ? : dp2[m][n]);
} return ;
}

DP(两次) 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. uva 10163 - Storage Keepers(01背包)

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

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

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

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

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

  5. UVA 10163 - Storage Keepers(dp)

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

  6. uva 10163 Storage Keepers

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

  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. CentOS 6.X配置 NFS以及启动和mount挂载

    一.环境介绍: 服务器:centos 192.168.1.225 客户端:centos 192.168.1.226 二.安装: NFS的安装配置:centos 5 : yum -y install n ...

  2. 万恶之源:C语言中的隐式函数声明

    1 什么是C语言的隐式函数声明 在C语言中,函数在调用前不一定非要声明.如果没有声明,那么编译器会自己主动依照一种隐式声明的规则,为调用函数的C代码产生汇编代码.以下是一个样例: int main(i ...

  3. Jenkins系列之-—02 email-ext 邮件模板

    邮件通知配置 系统管理 → 系统设置 → 邮件通知 SMTP 服务器:配置 SMTP 服务器.(不填默认本地运行服务器) 用户默认邮件后缀:注册用户邮件只需填写用户名即可,后缀会加该后缀,如果填写,则 ...

  4. int&amp;boolean——Java和C的一点小差别

    Java和C的差别非常多.只是预计这一点非常多人都不知道. 今天面试时碰到这么道C语言题 求执行结果 int x = -1; while(!x!=0){ cout<<x<<en ...

  5. 【bzoj1965】[Ahoi2005]SHUFFLE 洗牌

    x*2^m==l (mod n+1)x=(n/2+1)^m*l mod n+1 #include<algorithm> #include<iostream> #include& ...

  6. DataTables warning requested unknown parameter

    This is possibly the most cryptic warning message that DataTables will show. It is a short error mes ...

  7. 用css解决Unigui在IE系列浏览器中字体变小的问题(设置UniServeModule的customcss属性)

    Unigui运行在chrome浏览器下可以有最佳的效果,但用ie打开用unigui做的项目会发现字体明显小一截,可以用自定义css来解决这个问题. 可以在UniServeModule的customcs ...

  8. 解决Linux环境Oracle显示乱码

    首先查看当前的编码格式 select userenv('language') from dual; 解决方法:   一.临时解决方法   切换到Oracle用户,执行   export NLS_LAN ...

  9. POJ2533 Longest Ordered Subsequence —— DP 最长上升子序列(LIS)

    题目链接:http://poj.org/problem?id=2533 Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 6 ...

  10. SWFObject 的基本使用方法

    SWFObject是一个用于在HTML中方面插入Adobe Flash媒体资源(*.swf文件)的独立.敏捷的JavaScript模块.该模块中的JavaScript脚本能够自动检测PC.Mac机器上 ...