Codeforces 912D Fishs ( 贪心 && 概率期望 && 优先队列 )
题意 : 给出一个 N * M 的网格,然后给你 K 条鱼给你放置,现有规格为 r * r 的渔网,问你如果渔网随意放置去捕捞小鱼的情况下,捕到的最大期望值是多少?
分析 :
有一个很直观的想法就是如果将鱼放在越靠近中间的位置,其被捕捞的可能性越大
事实也的确如此,鱼的位置越靠近边缘则能覆盖到它的渔网安放位置就越少
那么这就有了一个贪心的算法
将第一条鱼放在最中间的位置算出被捕捉的概率
被捕捉的概率 = 能覆盖到当前小鱼位置的渔网个数 / 整个网格的全部安放渔网的方法数
然后从中间这个点开始向四周扩散,然后再找出概率最大的来进行扩张
因为概率越大说明其位置越靠近中间,所以首选概率最大的点进行扩张
这很像 BFS 的过程,所以我们可以使用一个优先队列来维护扩散出来的最大概率
然后选出前 K 个即可
对于每一个点能被多少个渔网放置方法覆盖,有个简便的方法
我们先分别算出横纵上的每一个点被覆盖的方法数即 (1~N, 1) 和 (1, 1~M)
然后对于中间的某个点,只要将刚刚算出来的结果进行相乘即可例如 (N, M) = (N, 1) * (1, M)
#include<bits/stdc++.h>
#define LL long long
using namespace std;
;
, -, , };
, , -, };
struct NODE{
double P;
int row, col;
NODE(){};
NODE(int r, int c, double p):row(r),col(c),P(p){};
bool operator < (const NODE &rhs) const{
return this->P < rhs.P;
};
};
set<pair<int, int> > s;///由于N*M太大了,所以用set进行判重
priority_queue<NODE> que;
int R[maxn], C[maxn];
int n, m, r, k;
bool bound(int row, int col)///判断是否越界,越界返回 true
{ || col< || row>n || col>m); }
int add[maxn];
inline void Calculate_R_Array(int len, int r)///计算纵轴上每个点被覆盖的方案数
{
; i<=len-r+; i++)
add[i]++, add[i+r]--;
;
; i<=len; i++)
sum += add[i],
R[i] = sum;
}
inline void Calculate_C_Array(int len, int r)///计算横轴
{
; i<=len-r+; i++)
add[i]++, add[i+r]--;
;
; i<=len; i++)
sum += add[i],
C[i] = sum;
}
int main(void)
{
while(~scanf("%d %d %d %d", &n, &m, &r, &k)){
s.clear(); while(!que.empty()) que.pop();
LL tot = (LL)(n-r+)*(LL)(m-r+);///注意使用 long long 存储
memset(add, , sizeof(add));
Calculate_R_Array(n, r);
memset(add, , sizeof(add));
Calculate_C_Array(m, r);
s.insert(make_pair(n/+, m/+));
que.push(NODE(n/+, m/+, (+]*R[n/+])/(double)tot));
;
while(k--){
NODE T = que.top();
que.pop();
ans += T.P;
; i<; i++){///向四个点扩散
int newr = T.row + dr[i];
int newc = T.col + dc[i];
if(bound(newr, newc)) continue;
if(!s.count(make_pair(newr, newc))){
s.insert(make_pair(newr, newc));
que.push(NODE(newr, newc, (double)(C[newc]*R[newr])/(double)tot));
}
}
}
printf("%.9f\n", ans);
}
;
}
Codeforces 912D Fishs ( 贪心 && 概率期望 && 优先队列 )的更多相关文章
- Codeforces 912D Fishes (概率&期望,优先队列的应用)
题目链接 Fishes 题意 在一个$n*m$的矩阵中,随机选择一个$r * r$的区域覆盖. 一开始我们可以在这个$n*m$的矩阵中选择$k$个点标记为$1$. 我们要选择一个最佳的标记策略,使得 ...
- CF605E Intergalaxy Trips 贪心 概率期望
(当时写这篇题解的时候,,,不知道为什么,,,写的非常冗杂,,,不想改了...) 题意:一张有n个点的图,其中每天第i个点到第j个点的边都有$P_{i, j}$的概率开放,每天可以选择走一步或者留在原 ...
- CF623D birthday 贪心 概率期望
题意:n个人,玩抓人游戏,每抓住一个人都要猜这个人是谁.对于每一局,第i个人有$p_{i}$的概率被抓到.游戏结束当且仅当每个人都在某局中被抓到并且猜中自己的名字,求一个合适的策略来使得期望游戏局数最 ...
- luoguP3232 [HNOI2013]游走 贪心 + 概率期望 + 高斯消元
首先,题目中的无向简单连通图代表着没有自环,重边... 总分的期望 = 每条边的期望之和...................每条边的期望又可以拆成$u \to v$的期望和$v \to u$的期望 ...
- Codeforces 1045D Interstellar battle 概率期望
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1045D.html 题目传送门 - CF1045D 题意 给定一棵有 $n$ 个节点的树,第 $i$ 个节点 ...
- Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp
一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\ ...
- CodeForces - 28C Bath Queue 概率与期望
我概率期望真是垃圾--,这题搞了两个钟头-- 题意 有\(n\)个人,\(m\)个浴室,每个浴室里有\(a_i\)个浴缸.每个人会等概率随机选择一个浴室,然后每个浴室中尽量平分到每个浴缸.问期望最长排 ...
- [Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT)
[Codeforces 553E]Kyoya and Train(期望DP+Floyd+分治FFT) 题面 给出一个\(n\)个点\(m\)条边的有向图(可能有环),走每条边需要支付一个价格\(c_i ...
- 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】
刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...
随机推荐
- [转帖]目标管理的S.M.A.R.T.理念
目标管理的S.M.A.R.T.理念 https://blog.csdn.net/gehantao/article/details/1593510 目标管理(MBO)是一种管理战略,它使用的是S ...
- LayUI 多选框动态加载、启用、禁用、赋值、取值等js实现
例如多选框如下: <div class="layui-form"> <select xm-select="city"> </sel ...
- 洛谷 P1273 有线电视网 题解
题面 按照常见树形背包定义状态:设dp[u][j]表示在以u为根的子树中,选择j个客户所能获得的最大收益. 状态转移:dp[u][j]=max(dp[u][j-k],dp[v][k]-w(u,v)); ...
- Yii中实例化类的四种方式
1.最简单的也是最基本的,大家都会的一种 use yii\caching\FileCache; $cache = new FileCache(); $cache->set("name& ...
- 未能将文件 bin\zh-CHS\Webdiyer.MvcPager.resources.dll 复制到 obj\Release\Package\PackageTmp\bin\zh-CHS\Webdiyer.MvcPager.resources.dll。 未能找到文件“bin\zh-CHS\Webdiyer.MvcPager.resources.dll”
在bin下面会生成更dll相同名称的xml文件,可能是因为我之前把项目中的很多部分设置了从项目中排除,关于dll也提示复制的问题解决办法是直接把那些生成的xml文件删除.在发布时还会提示obj文件夹下 ...
- 32、出任爬虫公司CEO(爬取职友网招聘信息)
职友集,搜索到全国上百家招聘网站的最新职位. https://www.jobui.com/rank/company/ 打开网址后,你会发现:这是职友集网站的地区企业排行榜,里面含有 本 ...
- loj 2778「BalticOI 2018」基因工程
loj luogu 这题和NOI那道向量内积一个套路 首先考虑求两行的不同元素个数,可以转化成一个行向量\(a\)和列向量\(b\)相乘得到一个值.如果只有\(A,C\)两种字符,那么令对应权值\(A ...
- centos 安装配置LAMP平台
实验环境: [root@nmserver-7 html]# cat /etc/redhat-release CentOS release 7.3.1611 (AltArch) [root@nmserv ...
- web框架-(七)Django补充---models进阶操作及modelform操作
通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...
- grpc 学习
RPC概念:(参考:http://www.imooc.com/article/285514) RPC(远程过程调用)一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样 ...