UVA - 1456 Cellular Network
题目大意:
手机在蜂窝网络中的定位是一个基本问题。如果蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个。最简单的方法是同一时候在这些区域中寻找手机。但这样做非常浪费带宽。
因为蜂窝网络中能够得知手机在这不同区域中的概率。因此一个折中的方法就是把这些区域分成w组,然后依次訪问。比方。已知手机可能位于5个区域中,概率分别为0.3、0.05、0.1、0.3和0.25,w=2,则一种方法是先同一时候訪问{c1,c2,c3},再同一时候訪问{c4,c5},訪问区域数的数学期望为3*(0.3+0.05+0.1)+(3+2)*(0.3+0.25)=4.1。还有一种方法是先同一时候訪问{c1,c4}。再訪问{c2,c3,c5},訪问区域数的数学期望为2×(0.3+0.3)+(3+2)×(0.05+0.1+0.25)=3.2。
解题思路:
由公式能够发现。为了让总期望值最小,应该让概率大的区域尽量放在前面去訪问。
所以先把全部概率从大到小排序一遍。然后分组时,就能够取连续的一段分为一组了。
f[i][j]表示: 前i个,分成j组的最小期望值
f[i][j] = min{ f[k-1][j] + i*sum[k~i], 1<=k<=i}
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int T;
scanf("%d", &T);
while (T--) {
int n, w;
double sum[110] = {0}, DP[110][110] = {0}, total = 0;
scanf("%d%d", &n, &w);
for (int i = 1; i <= n; i++) {
scanf("%lf", &sum[i]);
total += sum[i];
}
sort(sum + 1, sum + n + 1, greater<double>());
for (int i = 1; i <= n; i++)
sum[i] = sum[i] / total + sum[i-1];
for (int i = 1; i <= n; i++) {
DP[i][0] = 0x3f3f3f3f;
for (int j = 1; j <= w; j++) {
DP[i][j] = 0x3f3f3f3f;
for (int k = 1; k <= i; k++)
DP[i][j] = min(DP[i][j], DP[k-1][j-1] + i * (sum[i] - sum[k-1]));
}
}
printf("%.4lf\n", DP[n][w]);
}
return 0;
}
UVA - 1456 Cellular Network的更多相关文章
- DP + 概率 + 贪心 UVA 1456 Cellular Network
题目传送门 题意:(摘自LRJ<训练指南>) 手机在蜂窝网络中的定位是一个基本问题.假设蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手 ...
- UVA 1456 六 Cellular Network
Cellular Network Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit S ...
- Educational Codeforces Round 15 C. Cellular Network(二分)
C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- Educational Codeforces Round 15 Cellular Network
Cellular Network 题意: 给n个城市,m个加油站,要让m个加油站都覆盖n个城市,求最小的加油范围r是多少. 题解: 枚举每个城市,二分查找最近的加油站,每次更新答案即可,注意二分的时候 ...
- Codeforces Educational Codeforces Round 15 C. Cellular Network
C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- cf702C Cellular Network
C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- UVA 1386 - Cellular Automaton(循环矩阵)
UVA 1386 - Cellular Automaton option=com_onlinejudge&Itemid=8&page=show_problem&category ...
- Educational Codeforces Round 15_C. Cellular Network
C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- codeforces 702C Cellular Network 2016-10-15 18:19 104人阅读 评论(0) 收藏
C. Cellular Network time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- Jenkins的介绍
在公司看见有的部门在使用这个工具,好奇一下,今天就开始学习一番. 1.官网 https://jenkins.io/ 2.介绍 Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用 ...
- python3解析库lxml
阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2)读取HTML文件进行解析 (3)获取所有节点 (4)获取子节点 (5)获取父节点 (6)属性匹配 (7 ...
- 调整和删除Win7休眠文件Hiberfil.sys释放C盘
Hiberfil.sys 是 Windows 休眠功能(Windows Hibernation)将内存数据与会话保存至硬盘.以便计算机断电重新启动后可以快速恢复会话所需的内存镜像文件.在早期版本的 W ...
- 【可靠性】Mysql 5.7 降低了半同步复制-数据丢失的风险
如果你的生产线开启了半同步复制,那么对数据的一致性会要求较高,但在MySQL5.5/5.6里,会存在数据不一致的风险.有这么一个场景,客户端提交了一个事务,master把binlog发送给slave, ...
- SpringMVC(二七) 自定义视图
可以参考博客http://www.cnblogs.com/parryyang/p/5683600.html,举例很清晰. 对自定义的视图名称匹配不同的解析器进行解析. 作用:自己定义视图,视图继承vi ...
- 关于GitHub中文乱码的问题
其实跟Git里中文乱码相比,这个问题好解决得多. GitHub中的乱码是由于其使用的编码与Windows记事本的默认编码不同.只要在本地将编码改成UTF-8,再重新push就可以了. 修改编码的方法是 ...
- 10个非常有趣的Linux命令【转载】
Linux当中有很多比较有趣的命令,可以动手看看,很简单的. 1.rev命令 一行接一行地颠倒所输入的字符串. 运行: $rev 如输入:shiyanlou shiyanlou rev.jpg 2.a ...
- 转:自旋锁(spinlock)
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名. 由于 ...
- C# 结合html5 批量上传文件和图片预览
html5 新特性 <input id="imgsf" type="file" name="imgsf" multiple /> ...
- 潭州课堂25班:Ph201805201 django 项目 第二十二课 文章主页 新闻列表页面滚动加载,轮播图后台实现 (课堂笔记)
新建static/js/news/index.js文件 ,主要用于向后台发送请求, // 新建static/js/news/index.js文件 $(function () { // 新闻列表功能 l ...