博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2281: [Sdoi2011]黑白棋
阅读量:4880 次
发布时间:2019-06-11

本文共 1335 字,大约阅读时间需要 4 分钟。

再次,,,,,虚(一开始看错题了,看成一次移动一个棋子,能移动1-d个格子。。。这样的话有没有大神会做??本蒟蒻就教)

额,,直接%%%%把。。。http://hzwer.com/5760.html

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define N 1000005 7 #define inf 1000000000 8 #define LL long long 9 using namespace std;10 const LL mod=1e9+7;11 LL tot,ans;12 int n,K,d,p;13 LL bin[25];14 LL c[10005][205],f[25][10005];15 void pre()16 {17 for (int i=0; i<=n; i++) c[i][0]=1;18 for (int i=1; i<=n; i++)19 for (int j=1; j<=min(2*K,i); j++)20 c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;21 }22 int C(int x, int y)23 {24 if (y>x-y) y=x-y;25 return c[x][y];26 }27 void add(LL &x, LL y)28 {29 x=(x+y)%mod;30 }31 int main()32 {33 bin[0]=1; for (int i=1; i<=15; i++) bin[i]=bin[i-1]<<1;34 scanf("%d %d %d",&n,&K,&d); K/=2; pre(); f[0][0]=1;35 for (int i=0; i<15; i++)36 for (int j=0; j<=n-2*K; j++)37 for (int k=0; k*(d+1)<=K && j+(d+1)*k*bin[i]<=n-2*K; k++)38 {39 add(f[i+1][j+k*(d+1)*bin[i]],f[i][j]*C(K,k*(d+1)));40 }41 for (int i=0; i<=n-2*K; i++)42 add(ans,f[15][i]*C(n-i-K,K));43 tot=C(n,K*2);44 cout<<(tot+mod-ans)%mod;45 return 0;46 }

 

转载于:https://www.cnblogs.com/ccd2333/p/6498509.html

你可能感兴趣的文章
jQuery控制form表单元素聚焦
查看>>
wpf+.net 4.5 surface2.0 = 异步多点触控 时间轴 part1
查看>>
[android]不解锁刷机
查看>>
Ural1519 Formula 1
查看>>
SQLite笔记
查看>>
SQL Server 收缩日志
查看>>
安装ubuntu10.10后,如何配置一个Apache+MySQL+PHP环境
查看>>
UIAlertView、 UIActionSheet
查看>>
TinyWS —— 一个C++写的简易WEB服务器(三)
查看>>
jsp+struts2登录框架模板
查看>>
Java安装
查看>>
luogu P3410 拍照
查看>>
Mysql单表查询(胖胖老师)
查看>>
Linux的基本命令(CentOS)
查看>>
超链接的几个样式
查看>>
asp.net mvc验证特性
查看>>
接口interface和抽象类型abstract
查看>>
【高精度】贝贝与国王
查看>>
Math
查看>>
git安装配置
查看>>