B站学习记:贪心与博弈
贪心
1.
poj2287
N匹马的田忌赛马问题
稳稳地赢。
寻找最优的方案。
更优的收益。
有时候,局部最优导致全局最优。
马的能力值。
使得让我赢的局数最多。
对于对方的任何一匹马,如果我的马能打败它,那么我就要用能打败它的马里面能力值最小的马去迎战,如果我的马不能打败它,那么我就用剩下的所有马中能力
最小的马去迎战。这个思路是很贪心的。
贪心不是一板一眼的算法,更是一种思路。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int a[1010],b[1010]; //田忌和齐王的马速序列
int main()
{
//#ifdef CDZSC_June
//freopen("in.txt","r",stdin);
//#endif
//std::ios::sync_with_stdio(false);
int n;
while(scanf("%d",&n),n) //输入田忌和齐王马的匹数
{
for(int i=1;i<=n;i++) scanf("%d",&a[i]); //输入田忌 n 匹马的速度
for(int i=1;i<=n;i++) scanf("%d",&b[i]); //输入齐王 n 匹马的速度
sort(a+1,a+1+n); //按照马速递增顺序排列田忌的 n 匹马
sort(b+1,b+1+n); //按照马速递增顺序排列齐王的 n 匹马
int tl=1,tr=n,ql=1,qr=n; //A 序列的首尾指针和 B 序列的首尾指针初始化
int sum=0; //田忌赢得的银币数初始化
while(tl<=tr) //若比赛未进行完
{
if(a[tl]<b[ql]) //若田忌最慢的马慢于齐王最慢的马,则田忌最慢的马与齐王最快的马比,输一场
{
qr--;
tl++;
sum-=200;
}
else if(a[tl]==b[ql]) //若田忌最慢的马与齐王最慢的马速度相同
{
while(tl<=tr && ql<=qr) //循环,直至田忌或齐王的马序列空为止
{
if(a[tr]>b[qr]) //若田忌最快的马快于齐王最快马,则田忌最快的马与齐王最快的马比,赢一场
{
sum+=200;
tr--;
qr--;
}
else //否则若田忌最慢的马慢于齐王最快马,则田忌最慢的马与齐王最快的马比,输一场,退出 while
{
if(a[tl]<b[qr]) sum-=200;
tl++;qr--;break;
}
}
}
else //若田忌最慢的马快于齐王最慢的马,则田忌最慢的马与齐王最慢的马比,赢一场
{
tl++;
ql++;
sum+=200;
}
}
printf("%d\n",sum);
}
return 0;
}
2.
括号序列配对问题。
把一个问题的本质看透。
缺x个左括号的只能和缺x个右括号的去配对连接。只有这样它才一定生成合法的括号序列。
3.
RGB序列问题。
Red,Green,Blue.
可以从动态规划的方法来解决问题哦!
我们用贪心算法不是盲目贪心的哦!我们的贪心是能得到最优解的。有时候盲目去贪的话,还真让你贪对了。
贪心算法的理论证明是非常晦涩难懂的!
怎么贪也是一种学问哦!
博弈(game):
游戏就是对战!
在五子棋中,执黑先行,先手必胜。
1.
石子博弈。
谁先没得取谁就输了。
先手,后手。
枚举-----》》推出结论
我们可以先模拟一下哦。
先手必败的情形:n是3的倍数!
必胜态&&必败态。
必胜态的话是存在一个操作将必胜态转移到必败态的;必败态则是任何操作都只能从必败态转移到必胜态!
2.
取数博弈。
一直都是假设两个人都能做出最明智的决策。
先考虑必败态:只要所有
后手通过模仿先手的决策败先手之!
再考虑必胜态!
实现从必胜态到必败态的一种转移。
当然,博弈有很多有趣的问题!
谢谢a兵长老师的讲解!
B站学习记:贪心与博弈的更多相关文章
- 我在 B 站学习深度学习(生动形象,跃然纸上)
我在 B 站学习深度学习(生动形象,跃然纸上) 视频地址:https://www.bilibili.com/video/av16577449/ tensorflow123 http://tensorf ...
- python脚本处理下载的b站学习视频
作为常年在b站学习的我,一直以来看到有兴趣的视频,从来都是点赞收藏下载三连,但是苦于我那小钢炮iphone se屏幕大小有限,看起视频实在费劲,决定一定要找个下载电脑上下载b站视频的方法,以前用过硕鼠 ...
- 洛谷 P3387 【模板】缩点 DAGdp学习记
我们以洛谷P3387 [模板]缩点 来学习DAGdp 1.这道题的流程 //伪代码 for i->n if(i未被遍历) tarjan(i) 缩点() DAGdp() 完成 首先tarjan这部 ...
- MMM 数位dp学习记
数位dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...
- MMM 状压dp学习记
状压dp学习记 by scmmm 开始日期 2019/7/17 前言 状压dp感觉很好理解(本质接近于爆搜但是又有广搜的感觉),综合了dp的高效性(至少比dfs,bfs优),又能解决普通dp难搞定的问 ...
- BZOJ 1034 泡泡堂BNB 贪心+简单博弈
同样是今天做bzoj时做到的,感觉能力范围之内的就做了,也是蛮简单的 1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MB Su ...
- ftk学习记(icon篇)
[声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在開始今天的文章之前.我们还是先看一下上一节的效果图. 大家能够參照上一节的解说,是不是存在这种 ...
- ftk学习记(消息框篇)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 上一篇说到了输入框.闲话不多说,首先看结果显示, 大家看看效果是不是和我们之前说的一样.今天, ...
- 菜鸟VUER学习记——零0章、打开新的大门
是什么 基于MVVM模型,核心库只关注视图层,通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件的js框架.根据项目的复杂度和需求,渐进的加入插件以达到恰到好处的程度. 解决问题 UI组件化 ...
随机推荐
- 微软帮助类SqlHelper
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- JS DOM用不同方法获取节点及对节点插入、复制和移除
操作节点的方法 appendChild() insertBefore() replaceChild() cloneNode() normalize() splitText() sppendChild( ...
- Excel——排序筛选
1,自定义排序:多个关键字,从右向左一一排序 * 按颜色排序 * 按自定义序列排序 *两列中,列一个中间数,升序 * 打印标题行 * 选中,定位条件(可见),选择 * 数值筛选(大于等于),文本筛选( ...
- java设计模式学习笔记--依赖倒转原则
依赖倒转原则简述 1.高层模块不应该依赖低层模块,二者都应该依赖其抽象 2.抽象不应该依赖细节,细节应该依赖抽象 3.依赖倒转得中心思想时面向接口编程 4.依赖倒转原则时基于这样得设计理念:相对于细节 ...
- nvm Nodejs 版本管理器 安装及配置
1.如果已安装nodejs请先卸载干净 nodejs:删除C:\Program Files\nodejs 文件夹 npm:删除C:\Users\{用户名}\AppData\Roaming\npm 文件 ...
- html页面提交JSON,ASP页面接收并打印
jsonSubmit.html 1)能过 javascript函数驱动请求页 <!DOCTYPE html> <html> <head> <title> ...
- 【剑指Offer】59:对称的二叉树
题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题解:递归 public static boolean isSymmetric ...
- 破解版 Teamver 安装
一 .下载安装包 百度网盘链接:https://pan.baidu.com/s/18nEKAMmHEqU66Dq_aCnEYQ 提取码:2x2q 二.解压缩后,直接运行红框内绿色文件即可
- ES6 DEMO
案例: ①匿名封装 (function(window,document){ const HEAD = 1; let MSG = function(options){ this._init(option ...
- Windows添加管理员用户
使用命令提示符添加用户并提升管理员权限 net user 查看当前所有系统用户 net user dan 123456 /add 添加用户名为dan 密码为123456的用户 net localgro ...