贪心策略用于求解最优化问题,基本原理是:总是选择当前状态中最优的策略
当然,每一个局部最优加起来可能并不等于全局最优
这也是使用贪心前最需要搞清楚的问题:确定某个状态以前的过程不会影响以后的状态。

代理服务器:题目链接

使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私。我们知道n个代理服务器的IP地址,现在要用它们去访问m个服务器。这 m 个服务器的 IP 地址和访问顺序也已经给出。系统在同一时刻只能使用一个代理服务器,并要求不能用代理服务器去访问和它 IP地址相同的服务器(不然客户端信息很有可能就会被泄露)。在这样的条件下,找到一种使用代理服务器的方案,使得代理服务器切换的次数尽可能得少。

思路:
显然,每个服务器的使用次数没有限制,即每次使用哪个服务器对后序访问并无影响。那么对于要访问的IP地址IP1,IP2,……,IPn中,不论从哪个地址开始访问,每次只需找到能够访问最多IP地址的服务器(局部最优解),最后得到的就一定是全局最优解。

用例:

3
166.111.4.100
162.105.131.113
202.112.128.69
6
72.14.235.104
166.111.4.100
207.46.19.190
202.112.128.69
162.105.131.113
118.214.226.52

1

加上了一些描述访问过程的语句。

#include<string>
#include<iostream>
#include<vector>
using namespace std;int main()
{int n,m;while(cin >> n){string t;vector<string> ser;for(int i=0;i<n;i++){cin >> t;ser.push_back(t);}cin >> m;vector<string> vis;for(int i=0;i<m;i++){cin >> t;vis.push_back(t);}int ans = 0;while(true){int max = 0;//对每个服务器,计算其能够访问的最远距离 for(int i=0;i<ser.size();i++){int j;      for(j=0;j<vis.size();j++){if(ser[i] == vis[j]){ //地址相同,无法访问 if(j > max){max = j;cout << "max change to:" << max << endl;}break;} elsecout << "visit " << vis[j] << " with " << ser[i] << endl;}if(j == vis.size()) {//可能1:已经访问完所有网站,输出并结束即可 cout << ans << endl;return 0; }else{}   //可能2:由于ip地址相同,break到这里,但此时还没有计算完max值,需进入下个循环 }ans++;  //由贪心算法,此时的局部最优解就是全局最优解,所以将已访问的地址删去 cout << "max: " << max << ",the last erase IP is: " << *(vis.begin()+max-1)<< endl;vis.erase(vis.begin(),vis.begin()+max); //左闭右开 if(max == 0){  // 所有服务器都无法再前进一步,无解 cout << -1 << endl;return 0;}}}
}

贪心算法小记——代理服务器相关推荐

  1. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  2. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  3. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  4. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

  5. 漫画:五分钟学会贪心算法!

    假设一个问题比较复杂,暂时找不到全局最优解,那么我们可以考虑把原问题拆成几个小问题(分而治之思想),分别求每个小问题的最优解,再把这些"局部最优解"叠起来,就"当作&qu ...

  6. 下载插件(贪心算法)

    小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载.假定每分钟选择以下两种策略之一: 使用当前带宽下载插件 将带宽加倍(下载插件数量随之加倍) 请返回小扣完 ...

  7. Runnable接口和贪心算法

    1 Runnable接口 Runnable 接口应该由那些打算通过某一线程执行其实例的类来实现.设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议.激活的意思是说某个线程已启动并且尚未停止 ...

  8. 拜托,别再问我贪心算法了!

    来自:码海 前言 上篇一文学会动态规划解题技巧 被不少号转载了,其中发现有一位读者提了一个疑惑,在求三角形最短路径和时,能否用贪心算法求解.所以本文打算对贪心算法进行简单地介绍,介绍完之后我们再来看看 ...

  9. Dijkstra 贪心算法 动态规划

    我认为 Dijkstra算法 的本质是 广度优先搜索, 而此处的广度是定义在路程的cost之上的. (就好比从圆心处向外扩散一个圆环,首次碰到的就是最近) 动态规划泛指,重叠子问题与原问题的推算关系( ...

  10. 三十六、贪心算法--集合覆盖问题

    一.贪心算法介绍 1.贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 2.贪心算法不是对所有问题都 ...

最新文章

  1. Dubbo 负载均衡的实现
  2. 测试php连接mysql
  3. python之禅中文-「翻译」Python之禅
  4. 双11,2分钟狂挣20亿的神秘大厂,急招.NET!
  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]45.描述一些对抗RSA侧信道攻击的防御方法
  6. java集合框架中contains(),containsKey()和containsValue()的用法
  7. 分治算法——快速排序
  8. RHEL7 -- 使用Chrony设置时间与时钟服务器同步
  9. ## 2018-2019-1 《信息安全系统设计基础》 20165232 20165231 20165235 实验五 通信协议设计...
  10. Facebook F8|闲鱼高级技术专家参会分享
  11. 移动边缘计算环境下边缘服务器放置方法研究
  12. STM8 捕获模式HS0038 红外遥控解码
  13. 拉普拉斯变换的本质意义(好文!通俗易懂)
  14. html的长度单位的选择,html中常见长度单位有哪些?
  15. 【MQTT】使用MQTT.fx上报温度到腾讯云
  16. 漫画:网站访问缓慢怎么办?
  17. 位图文件存储空间的计算
  18. php中的逻辑运算符优先级,PHP运算符优先级 运算符分类
  19. C++文件流fstream相关操作
  20. 数字藏品的交易平台有哪些 nft数字藏品

热门文章

  1. 各种语言的模块导入导出形式
  2. custom transition animation between UIViewControllers
  3. 编译安装Gearman、python简单测试
  4. 使用索引的技巧知识点
  5. Unity的属性注入
  6. RIP路由六大防环机制
  7. HCIE-Security Day18:防火墙用户管理(一)上网用户+本地认证(portal认证)
  8. Python写视图界面--pyqt的使用
  9. 十九、K8s集群设置1- kube-bench
  10. Security+ 学习笔记47 事件响应方案