博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AHOI 2009] 中国象棋
阅读量:4616 次
发布时间:2019-06-09

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

题意:

给一个n*m的棋盘,要求每一行列只能有不超过3个棋子,问方案数(棋子数任意)

\(n,m \le 100\)

题解:

这题唯一的脑洞之处就只有状态了

观察到每一行/列最多只能有2个,在这上面做手脚
设置\(f_{i,j,k}\)表示前i行完成,还有j列可以放2个,k列可以放1个
转移显然

过程:

很顺利,除了状态想了一会儿

代码:

const int N=110;const ll P=9999973;int n,m;ll f[N][N][N],C[N][N],ans;signed main() {    read(n); read(m);    for(int i=0;i<=100;i++) C[i][0]=1;    for(int i=1;i<=100;i++)        for(int j=1;j<=i;j++)            C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;    f[0][m][0]=1;    for(int i=0;i
1) (f[i+1][j-2][k+2]+=val*C[j][2])%=P; if(k>1) (f[i+1][j][k-2]+=val*C[k][2])%=P; } for(int i=0;i<=m;i++) for(int j=0;i+j<=m;j++) (ans+=f[n][i][j])%=P; printf("%lld\n",ans); return 0;}

用时:15

转载于:https://www.cnblogs.com/functionendless/p/9444533.html

你可能感兴趣的文章
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
bzoj 4595 激光发生器
查看>>
multi cookie & read bug
查看>>
js时间转换
查看>>
(转载) Android Studio你不知道的调试技巧
查看>>
队列实现霍夫曼树
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
Vijos P1243 生产产品 (单调队列优化DP)
查看>>
iOS常用第三方库 -转
查看>>
Android布局学习
查看>>
jQuery中事件绑定与解绑
查看>>