BZOJ3492: PA2012 Binary Dodgeball
2016-05-18 12:43
211 查看
感谢YJQ和visitWorld两位打野..
画个图发现是个Nim游戏
然后发现是个数位DP..
画个图发现是个Nim游戏
然后发现是个数位DP..
#include<cstdio> #include<iostream> #include<cstring> using namespace std; #define ll long long ll DP[51][4][81][2]; ll check(ll max) { ll base=1ll<<49; memset(DP,0,sizeof(DP)); DP[0][0][0][1]=1; for(int i=1;i<=50;i++,base>>=1) for(int k=0;k<=63;k++) { if(i==48&&k==2) i++,i--; if(base&max)DP[i][3][k][1]=DP[i-1][3][k][1]+DP[i-1][1][k][1]; else DP[i][2][k][1]=DP[i-1][3][k^(50-i)][1]+DP[i-1][1][k^(50-i)][1]; if(base&max) DP[i][1][k][1]=DP[i-1][0][k^(50-i)][1]+DP[i-1][2][k^(50-i)][1]; else DP[i][0][k][1]=DP[i-1][0][k][1]+DP[i-1][2][k][1]; DP[i][3][k][0]=DP[i-1][3][k][0]+DP[i-1][1][k][0]; DP[i][1][k][0]=DP[i-1][2][k^(50-i)][0]+DP[i-1][0][k^(50-i)][0]; DP[i][2][k][0]=DP[i-1][1][k^(50-i)][0]+DP[i-1][3][k^(50-i)][0]+ ((base&max)?DP[i-1][1][k^(50-i)][1]+DP[i-1][3][k^(50-i)][1]:0); DP[i][0][k][0]=DP[i-1][2][k][0]+DP[i-1][0][k][0]+ ((base&max)?DP[i-1][2][k][1]+DP[i-1][0][k][1]:0); } int i=50; return DP[i][0][0][0]+DP[i][1][0][0]+DP[i][3][0][0]+DP[i][2][0][0]+ DP[i][0][0][1]+DP[i][1][0][1]+DP[i][3][0][1]+DP[i][2][0][1]-1; } int main() { ll k; scanf("%lld",&k); ll R=1ll<<48,T,Mid,L=1; ll Ta=check(10); while(L<R) { Mid=L+R>>1; if((T=check(Mid))<k)L=Mid+1; else R=Mid; } cout<<L<<endl; return 0; }
相关文章推荐
- 获取iOS app版本信息
- Objective-C 学习笔记
- mfc中 CString转char*
- CI框架的安全性分析
- Java EE中Ajax技术介绍
- CSDN-markdown编辑器语法简介
- 跟王老师学泛型(八):泛型擦除与转换
- iOS普通字符串和UTF-8之间的相互转换
- 跟王老师学泛型(七):限制通配符
- Jquery学习1
- 跟王老师学泛型(六):类型通配符
- 跟王老师学泛型(五): 自定义带泛型声明的方法
- 计算机视觉研究 CVonline: The Evolving, Distributed, Non-Proprietary, On-Line Compendium of Computer Vision
- IOS 开发 OC(Object_C)与前端页面JS(JavaScript)交互整理(一)
- mysql中binlog_format模式与配置详解
- 跟王老师学泛型(四):定义泛型接口及实现
- POJ 2488 A Knight's Journey
- JavaScript数组常用操作大全
- Android通用流行框架大全
- JavaScript编写Web脚本最佳实现