Codeforces 300D Painting Square 题解
题意
一个四周围都是黑色的由n行n列小格子组成的方块,每次可以选择一个已经由黑框包围的正方形将它的一行一列涂黑要求分割出的部分还都是正方形,问涂k次可以有多少种不同的涂法
思路
因为只能分割成正方形,所以肯定是每一次涂最中间的行和最中间的列,那么可以涂的次数就是不断对n减一除以2看能做多少层,至于答案就用dp计算,从小往大,先左右变成二倍,再上下变成二倍,ans[i][j]=(ans[i][j]+(temp[k]*temp[j-1-k])%mod)%mod,ans[i][j]表示涂i层已经涂了j次的涂法数量,temp[k]表示上下一半那么大涂k次的方法数,temp[j]=(temp[j]+(ans[i][k]*ans[i][j-k])%mod)%mod,这个就是在做左右的延展,左边涂k次,右边涂j-k次,一共就涂了j次,最后ans[层数][k]就是答案
代码
#include<cstdio>
#define mod 7340033
long long ans[31][1001],temp[1001];
int main()
{long long q,n,k,cnt;ans[0][0]=1;temp[0]=1;for(long long i=1;i<=30;i++){ans[i][0]=1;for(long long j=1;j<=1000;j++)for(long long k=0;k<j;k++)ans[i][j]=(ans[i][j]+(temp[k]*temp[j-1-k])%mod)%mod;for(long long j=1;j<=1000;j++)temp[j]=0;temp[0]=1;for(long long j=1;j<=1000;j++)for(long long k=0;k<=j;k++)temp[j]=(temp[j]+(ans[i][k]*ans[i][j-k])%mod)%mod;}scanf("%I64d",&q);for(long long i=0;i<q;i++){scanf("%I64d%I64d",&n,&k);cnt=0;while((n%2)&&n>1){cnt++;n/=2;}printf("%I64d\n",ans[cnt][k]);}return 0;
}
Codeforces 300D Painting Square 题解相关推荐
- Codeforces 300D Painting Square dp
Painting Square 转换一下变成 a 层的完全四叉树, 占领 k 个点有多少种方案, 点能被占当且仅当它的父亲被占. a <= 30, 所以我们把每层都dp出来, dp[ i ][ ...
- [CodeForces 300D Painting Square]DP
http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...
- codeforces div2 Not Assigning 题解
codeforces div2 Not Assigning 题解 原题链接 /* 题意:构造一棵素数树.素数树定义如下: 这颗树中任意一条边 or 任意两条边 权重之和为素数,每条边的权重自己分配. ...
- 洛谷P4084 [USACO17DEC]Barn Painting G 题解
洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...
- [Codeforces Round #195 DIV2E (CF336E)] Vasily the Bear and Painting Square
题意 当n=0n=0时有如下图像 当n=1n=1时有如下图像 当n=2n=2时有如下图像 题目要求对定的nn的图像,染k个三角形(并不要求染最小的三角形),求染色方案数. 需要注意的是:即使染色完毕后 ...
- Codeforces Round #599A~D题解
Maximum Square 这是一道很简单的题目大意就是说给你一个几个木棍拼成一串问你从中扣出一个正方形的最大边长是多少 二分简单枚举一下可能的长度再判断一下就好了 #include <ios ...
- Codeforces 448C Painting Fence:分治
题目链接:http://codeforces.com/problemset/problem/448/C 题意: 有n个木板竖着插成一排栅栏,第i块木板高度为a[i]. 你现在要将栅栏上所有地方刷上油漆 ...
- CodeForces - 1480D2 Painting the Array II(dp)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 小.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...
- CodeForces - 1480D1 Painting the Array I(贪心)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求拆分成两个子序列,使得两个子序列的贡献之和最 大.对于一个序列的贡献就是,去掉相邻且相同的字母后的长度,即 ∑i=1n[a[i]! ...
最新文章
- 科学通报:合成微生物群落的构建与应用
- nginx的hash表结构
- 如何判断 .NET Core 应用程序是以管理员身份运行
- 六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...
- java.sql.connection 长时间不使用_车子长时间停放不使用,要做到这几点!不然报废是小,安全是大...
- python 深度 视差 计算_python-窗口代价计算视差
- oracle下的inventory文件夹,oracle INVENTORY 详解
- Android HAL层与Linux Kernel层驱动开发简介
- 11 Sping框架--AOP的相关概念及其应用
- 微信游戏小程序源码-合成大西瓜小游戏(合成版)源码 附带流量主功能
- ogg怎么转换成mp3格式?
- LPVOID傳遞參數的問題
- 用Actix写的一个类似于Facemash的小项目总结
- jQuery如何使用most()方法?代码示例和解析
- 动画效果--漫天飞雪
- python3必应壁纸爬虫练手
- 搭建Jpress博客系统,超详细(保姆及教学)
- 用python批量生成有效的IP地址
- 华为云搭建javaweb服务器
- 深入浅出系列之 -- kafka消费者的三种语义模型