清北学堂提高组突破营游记day6
还有一天就结束了。。QWQ
好快啊。
昨天没讲完的博弈论DP:

一个标准的博弈论dp,一般问的是是否先手赢。
博弈论最关键的问题:dp过程。

对于一个问题,一定有很多状态,每个状态可以转移到其他的一些状态。如果存在一个状态,且不能转移到其他状态,那么我们设这个状态为必败态,那么他相邻的能够转移到必败态的状态因为只有一种转移方式,那么一定为必胜态,(假设操作双方选手绝顶聪明,每一步都朝着最优状态走),如此这样交替下去,推到开始状态,就可以判断了。
怎么转换?
对于一个节点以及他所有子节点来讲,如果子节点全部为true(对手的必胜态),那么当前节点为你的必败态。
如果子节点中有一个false(对手必败态),那么当前节点就是你的必胜态。
于是我们用dfs记忆化枚举并dp:
#include<iostream> using namespace std; bool f[][],g[][]; bool dfs(int i,int j)
{
if (i==) return false;
if (g[i][j]) return f[i][j];
g[i][j]=true;f[i][j]=false;
for (int r=;r<=i && r<=k*j;r++)
if (dfs(i-r,r) == false) f[i][j]=true;
return f[i][j];
} int main()
{
cin >> s >> k;
for (int a=;a<s;a++)
if (dfs(s-a,a) == false)
{
cout << "Alice" << endl;
return ;
}
cout << "Bob" << endl; return ;
}

这个题用到sg函数:sg[n]表示从n往下到一个能取到的最低的值中最小的没有出现过的非负整数的值,
suchas:在序列2 5 6 7中,sg[4]=0,在序列1 2 3 4 6中,sg[5]=5;
这个东西有什么用?
SG函数可以解决大多数博弈问题,当然也可以通过SG函数找规律,然后计算结果。
答案是把所有奇数堆都取出来并求sg函数并亦或,如果答案为0,先手必败。
至于sg的正确性的话。。。
zhx:“这个东西如果你去看的话没有2个小时你是看不下来的,如果想看懂全部原理和证明的话没有2天是不行的。”.
我看了看,

所以证个锤子。背过模板万事皆有可能。
各种例题:



sg函数求法:
下午考试,爆零警告。
清北学堂提高组突破营游记day6的更多相关文章
- 清北学堂提高组突破营游记day3
讲课人更换成dms. 真的今天快把我们逼疯了.. 今天主攻数据结构, 基本上看完我博客能理解个大概把, 1.LCA 安利之前个人博客链接.之前自己学过QWQ. 2.st表.同上. 3.字符串哈希.同上 ...
- 清北学堂提高组突破营游记day5
长者zhx来啦.. (又要送冰红茶了...) zhx一上来就讲动态规划...是不是要逼死人.... 动态规划: 最简单的例子:斐波那契数列.因为他是递推(通项公式不算)的,所以前面的已经确定的项不会影 ...
- 清北学堂提高组突破营游记day4
今天主攻图论. 对于这道题,30分做法是暴力搜索全部来判断是否有异样. 对于满分做法,利用带权并查集.? 又带我们串了一边LCA 安利个人LCA博客. spfa代码.原理:循环队列. 然后是floyd ...
- 清北学堂提高组突破营考试T1
题目如下: (想要作弊的后几届神仙们我劝你们还是别黈了,这个题如果你们不会只能证明你们上错班了). 好,题目看完了,发现是一道大模拟(%你)题,于是我们按照题目说的做: #include<ios ...
- 清北学堂提高突破营游记day1
上午7点半到的国防宾馆,8点开始的培训. 讲课人林永迪. 没错就是这个人: 他推荐的教辅:刘汝佳紫书,算法导论(也就看看..),刘汝佳白书 先讲模拟.(貌似就是看题论题. 然后贪心. 贪心没有固定的模 ...
- 清北学堂提高突破营游记day2
先水了一下昨天没讲完的贪心. 然后今天讲的分治. 安利自己水的二分与三分. 二分一定要满足有序.三分适合解决单峰函数问题. 第一道题借教室.运用差分和二分查找. 三分: P1731 [NOI1999] ...
- <知识整理>2019清北学堂提高储备D2
简单数据结构: 一.二叉搜索树 1.前置技能: n/1+n/2+……+n/n=O(n log n) (本天复杂度常涉及) 2.入门题引入: N<=100000. 这里多了一个删除的操作,因此要 ...
- <知识整理>2019清北学堂提高储备D1
一.枚举: 枚举是最简单最基础的算法,核心思想是将可能的结果都列举出来并判断是否是解. 优点:思维简单,帮助理解问题.找规律.没头绪时 缺点:时空复杂度较高,会有很多冗余的非解(简单的枚举几乎没有利用 ...
- <知识整理>2019清北学堂提高储备D3
全天动态规划入门到入坑... 一.总概: 动态规划是指解最优化问题的一类算法,考察方式灵活,也常是NOIP难题级别.先明确动态规划里的一些概念: 状态:可看做用动态规划求解问题时操作的对象. 边界条件 ...
随机推荐
- leecode 309. 最佳买卖股票时机含冷冻期
/***** //sell[i]表示截至第i天,最后一个操作是卖时的最大收益: //buy[i]表示截至第i天,最后一个操作是买时的最大收益: //cool[i]表示截至第i天,最后一个操作是冷冻期时 ...
- robotframework 配置过程中遇到的问题
现有环境配置:操作系统: Win7 32bitPython 2.7.8Python 3.5.2Pycharm Community Edition 2016.3.2robotframework: 3.0 ...
- 转载----c++ static修饰的函数作用与意义
static修饰的函数叫做静态函数,静态函数有两种,根据其出现的地方来分类: 如果这个静态函数出现在类里,那么它是一个静态成员函数: 静态成员函数的作用在于:调用这个函数不会访问或者修改任何对象(非s ...
- JSP指令标签、动作标签
JSP有三大指令: * page指令 * include指令 * taglib指令 在JSP中没有任何指令是必须的!!! 但基本上每个JSP都是使用page指令! page指令 page ...
- Activity 的 36 大难点,你会几个
前言 学 Android 有一段时间了,一直都只顾着学新的东西,最近发现很多平常用的少的东西竟让都忘了,趁着这两天,打算把有关 Activity 的内容以问题的形式梳理出来,也供大家查缺补漏. 本文中 ...
- Cocos2d-X多线程(2) 线程的互斥量std::mutex和线程锁
多个线程同时访问共享资源时,经常会出现冲突等.为了避免这种情况的发生,可以使用互斥量,当一个线程锁住了互斥量后,其他线程必须等待这个互斥量解锁后才能访问它. thread提供了四种不同的互斥量: 1. ...
- python学习之模块-模块(二)
5.2 序列化模块 将一种数据结构转换成一种特殊的序列(字符串或bytes)的过程就叫序列化.这个特殊的序列还可以通过命令反解回原来的数据类型. python中有三种序列化的功能模块: json模 ...
- mariadb数据库——关联、视图、事务、索引、外键
1.关联 1)连接查询(内关联) inner join ... on 两个表连接查询 select * from students inner join classes 查询能够对应班级的学生以及班级 ...
- 奥比中光Astra Pro在ROS系统中的使用
奥比中光Astra Pro在ROS系统中的使用 上一次介绍了Astra Pro在ubuntu中的使用,由于Astra Pro使用uvc传输彩色图像,所以当用rqt_image_view窗口 时,看不到 ...
- 第五周课程总结&实验报告(三)
实验三 String类的应用 实验目的: (1)掌握类String类的使用: (2)学会使用JDK帮助文档: 实验内容: 1.已知字符串:"this is a test of java&qu ...