当前位置: 首页 > news >正文

Luogu5363 SDOI2019移动金币(博弈+动态规划)

  容易想到可以转化为一个有m堆石子,石子总数不超过n-m的阶梯博弈。阶梯博弈的结论是相当于只考虑奇数层石子的nim游戏。

  nim和不为0不好算,于是用总方案数减掉nim和为0的方案数。然后考虑dp,按位考虑,设f[i][j]为已确定奇数石子堆的第i位及以上的放法后,保证当前异或和为0,剩下j个石子时的方案数。转移套一些组合数即可。

#include<iostream> 
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define P 1000000009
#define N 150100
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;}
int gcd(int n,int m){return m==0?n:gcd(m,n%m);}
int read()
{
	int x=0,f=1;char c=getchar();
	while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
	while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
	return x*f;
}
int n,m,fac[N],inv[N],f[20][N],ans=1;
int C(int n,int m){if (m>n) return 0;return 1ll*fac[n]*inv[m]%P*inv[n-m]%P;}
int F(int n,int m){return C(n+m-1,m-1);}
int main()
{
#ifndef ONLINE_JUDGE
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	const char LL[]="%I64d\n";
#else
	const char LL[]="%lld\n";
#endif
	n=read(),m=read();
	fac[0]=1;for (int i=1;i<=n+m;i++) fac[i]=1ll*fac[i-1]*i%P;
	inv[0]=inv[1]=1;for (int i=2;i<=n+m;i++) inv[i]=P-1ll*(P/i)*inv[P%i]%P;
	for (int i=2;i<=n+m;i++) inv[i]=1ll*inv[i-1]*inv[i]%P;
	ans=C(n,m);n-=m;
	f[19][n]=1;
	for (int i=18;~i;i--)
		for (int j=0;j<=n;j++)
			for (int k=0;j+(2*k<<i)<=n&&2*k<=(m+1>>1);k++)
			f[i][j]=(f[i][j]+1ll*f[i+1][j+(2*k<<i)]*C(m+1>>1,2*k)%P)%P;
	for (int i=0;i<=n;i++)
	ans=(ans+P-1ll*f[0][i]*F(i,(m>>1)+1)%P)%P;
	cout<<ans;
	return 0;
} 

  

转载于:https://www.cnblogs.com/Gloid/p/10833894.html

相关文章:

  • P1099 树网的核
  • Spectral analysis——光谱分析
  • iptables
  • 视觉暂留:视觉暂留
  • qt环境配置
  • 提升Scrapy框架爬取数据效率的五种方式
  • 详解Linux运维工程师必备技能
  • c++实现字符串分割函数--split()
  • 基于预计算的全局光照技术
  • java实现多线程(下)
  • 球谐光照——杂谈——待完成
  • 基于体素的全局光照技术
  • 路径追踪技术
  • 辐射度方法
  • [计算机体系结构:量化研究方法]学习笔记:Chapter 1
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【5+】跨webview多页面 触发事件(二)
  • ComponentOne 2017 V2版本正式发布
  • css的样式优先级
  • css系列之关于字体的事
  • ECS应用管理最佳实践
  • js作用域和this的理解
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mac转Windows的拯救指南
  • SpingCloudBus整合RabbitMQ
  • spring boot下thymeleaf全局静态变量配置
  • 关于springcloud Gateway中的限流
  • 基于组件的设计工作流与界面抽象
  • 算法之不定期更新(一)(2018-04-12)
  • 学习使用ExpressJS 4.0中的新Router
  • 赢得Docker挑战最佳实践
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​Java并发新构件之Exchanger
  • #include<初见C语言之指针(5)>
  • #QT(TCP网络编程-服务端)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $jQuery 重写Alert样式方法
  • (分布式缓存)Redis哨兵
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • ***检测工具之RKHunter AIDE
  • 、写入Shellcode到注册表上线
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .a文件和.so文件
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Micro Framework初体验(二)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET建议使用的大小写命名原则
  • .NET下的多线程编程—1-线程机制概述
  • []sim300 GPRS数据收发程序
  • [AIGC codze] Kafka 的 rebalance 机制
  • [go 反射] 进阶