题目链接:Fishes

题意:

  有一个n×m的鱼塘,有一张r×r的渔网,现在往池塘里面放k条鱼(每个格子只能放一条鱼), 现在撒网的地方是随机的(必须在池塘内),问能捕的鱼的期望值最大是多少?

题解:

  这题dfs我是真的没想到。。因为怎么说,总是感觉这样有些暴力吧@。@# 要好好反思了。这题首先要把每个位置网覆盖的次数的公式推出来(用if else也行其实),因为可以发现最中间的位置一定最大,所以选取最中间的位置开始bfs,把遇到的点都放到优先队列中,这里对优先队列进行符号重载就可以很好地解决排序的问题,很值得学习。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAX_N = 1e5+9;
 4 long long N,M,r,k;
 5 struct P
 6 {
 7     long long first,second;
 8     P(int x,int y){first = x,second = y;}
 9 };
10 priority_queue <P> que;
11 set<int> st[MAX_N];
12 long long get_val(P t)
13 {
14     return (min(N - r + 1, t.first) - max(1ll, t.first - r + 1) + 1) * (min(M - r + 1, t.second) - max(1ll, t.second - r + 1) + 1);
15 }
16 bool operator < (const P &a,const P &b)
17 {
18     return get_val(b) > get_val(a);
19 }
20
21 int main()
22 {
23     while(cin>>N>>M>>r>>k)
24     {
25         while(!que.empty()) que.pop();
26         for(int i=0;i<MAX_N;i++) st[i].clear();
27         int x = (N+1)/2;
28         int y = (M+1)/2;
29         que.push(P(x,y));
30         st[x].insert(y);
31         double ans = 0;
32         long long num = 0;
33         while(!que.empty())
34         {
35             P t = que.top();que.pop();
36             ans += (get_val(t)*1.0)/((N-r+1)*(M-r+1)*1.0);
37             k--;
38             if(!k) break;
39             //cout<<t.first<<"..."<<t.second<<"...."<<get_val(t)<<endl;
40             if(t.first+1>0 && t.first+1<=N && st[t.first+1].count(t.second) == 0) que.push(P(t.first+1,t.second)),st[t.first+1].insert(t.second);
41             if(t.first-1>0 && t.first-1<=N && st[t.first-1].count(t.second) == 0) que.push(P(t.first-1,t.second)),st[t.first-1].insert(t.second);
42             if(t.second-1 >0 && t.second-1 <=M && st[t.first].count(t.second-1) == 0) que.push(P(t.first,t.second-1)),st[t.first].insert(t.second-1);
43             if(t.second+1 >0 && t.second+1 <=M && st[t.first].count(t.second+1) == 0) que.push(P(t.first,t.second+1)),st[t.first].insert(t.second+1);
44         }
45         printf("%.10lf\n",ans);
46     }
47     return 0;
48 }

转载于:https://www.cnblogs.com/doggod/p/8413035.html

Codeforces 912 D. Fishes (贪心、bfs)相关推荐

  1. 【Codeforces】158B-Taxi(贪心,怎么贪咧)

         贪心   emmmm http://codeforces.com/contest/158/problem/B 题目大意:有四种旅客,四人一组,三人一组,两人一组,一人一组,一辆出租车最多可以 ...

  2. CodeForces - 1607D Blue-Red Permutation(贪心)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,每个数字有一个颜色,如果是蓝色,每次操作则可以减一:如果是红色,每次操作则可以加一. 问有限次操作后,能否将数组变为一个长度为 nnn 的 ...

  3. CodeForces - 1481E Sorting Books(贪心+dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,每次操作可以将任意一本书放到序列的末尾,问最少需要操作多少次,才能使得相同的数字挨在一起 题目分析:不难看出,对每个位置的数都操作一次,是 ...

  4. hdu-1728(贪心bfs的灵活运用吧)

    链接 [https://vjudge.net/contest/256476#problem/D] 题意 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到 ...

  5. CodeForces 176A Trading Business 贪心

    Trading Business 题目连接: http://codeforces.com/problemset/problem/176/A Description To get money for a ...

  6. LeetCode 45. 跳跃游戏 II(贪心/BFS,难)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 BFS 1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 你的目标是使用最少的 ...

  7. codeforces 735C Tennis Championship(贪心+递推)

    Tennis Championship 题目链接:http://codeforces.com/problemset/problem/735/C --每天在线,欢迎留言谈论. 题目大意: 给你一个 n ...

  8. Codeforces 161 B. Discounts (贪心)

    题目链接:http://codeforces.com/contest/161/problem/B 题意: 有n个商品和k辆购物车,给出每个商品的价钱c和类别t(1表示凳子,2表示铅笔),如果一辆购物车 ...

  9. 力扣765——情侣牵手(贪心+BFS)

    解题思路 空间换时间 可以发现,每对情侣谁左谁右,旁边是谁,都没关系,只要这俩是一对且在一格就行: 因为要求全坐好,因为首尾不相连,下标0只能和下标1配对,这就相当于一格为两个偶奇下标: 首先遍历每一 ...

最新文章

  1. Java报错:java.math.BigDecimal cannot be cast to java.lang.String
  2. 杏树林孙文亮:在线医疗数据驱动实战
  3. WebIDE,让开发更简单
  4. mysql search yum_mysql安装-yum方式
  5. LeetCode 683. K 个空花盆(set/滑动窗口)
  6. Java IO(File类)
  7. C# 中XML序列化与反序列化学习笔记
  8. 【Shell】特殊变量
  9. IDEA中XML与main文件里设置自动补全快捷键
  10. 极通EWEBS远程接入v4.2 XP专版
  11. Ch6 深度前馈神经网络
  12. word括号显示问题
  13. 存储器计算机原理实验,存储器扩展实验|计算机原理存储器扩展实验
  14. win10系统关机被阻止解决方法
  15. 国内外AI绘画软件汇总
  16. WPF入门教程系列(2)---基础篇
  17. js如何实现侧边广告_如何用稳定器轻松实现低成本的商业级广告片制作?
  18. DZ 系统维护工具箱Tools
  19. 服务器系统防火墙设置在哪里设置方法,服务器怎么设置防火墙设置在哪里
  20. 股票pb接口是什么?

热门文章

  1. 妙赞大讲糖:糖友食谱的三宜
  2. 一个常见的文字无缝滚动效果
  3. 微信小程序开发采坑记录1
  4. Day_8/08(List集合和Set集合)
  5. 分享实录 | 阿里巴巴DevOps文化浅谈
  6. 屹立千年,只为你一个回眸
  7. VMware启动CentOS7黑屏解决方案
  8. 使用这个算法我可以实现英雄联盟里英雄的走位|Java 开发实战
  9. Python写停车场收费系统
  10. 从做深基础,曝光正在“变硬”的阿里云