题目链接 https://vjudge.net/problem/UVA-861

题意: 一个国际象棋棋盘,‘象’会攻击自己所在位置对角线上的棋子。问n*n的棋盘 摆放k个互相不攻击的 '象' 有多少种方式。

解析 :我们知道国际象棋的棋盘是黑交替 所以容易知道放在白格上的棋子  和  放在黑格上的棋子是不会互相攻击的。所以把白格和黑的分别拿出来讨论

相当于从白格里面拿i个 从黑格里面拿k-i个的方案数(0<=i<=k)   我们就开始处理从  白格   里面拿i个的方案数,我们把矩阵旋转45度看

W
B B
WWW

B B B B
WWWWW
B B B B 
WWW
B B
W

然后调整一下

W

W

WWW

WWW

WWWWW

变成了这样 dp[ i ] [ j ] 表示 前 i 行放置 j 个棋子的方案数,假设第 i 行没有棋子,方案数就是dp[ i-1 ] [ j ], 假设 第 i 行 有 棋子 方案数就是dp[ i-1 ][ j-1 ] * ( a[ i ] - (i-1) ) ( a[ i ]表示当前

行的列数,减去前面被占用的行,就是当前行的选择数 ).   黑色格子一样.

代码

 #include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define huan printf("\n");
#define debug(a,b) cout<<a<<" "<<b<<" ";
using namespace std;
typedef long long ll;
const int maxn=,maxm=,inf=0x3f3f3f3f;
const ll mod=;
ll a[maxn],b[maxn];
ll dpa[maxn][maxn],dpb[maxn][maxn];
int main()
{
int n,k;
while(cin>>n>>k)
{
if(n==)
return ;
fillchar(a,);
fillchar(b,);
fillchar(dpa,);
fillchar(dpb,);
int cnt1=,cnt2=;
for(int i=;i<n;i++)
if(i%==)
{
a[cnt1++]=i;
a[cnt1++]=i;
}
for(int i=;i<n;i++)
if(i%==)
{
b[cnt2++]=i;
b[cnt2++]=i;
}
if(n%==)
b[cnt2++]=n;
else
a[cnt1++]=n;
dpa[][]=;
for(int i=;i<cnt1;i++)
{
dpa[i][]=;
for(int j=;j<=k;j++)
{
dpa[i][j]=dpa[i-][j]+dpa[i-][j-]*(a[i]-j+);
}
}
dpb[][]=;
for(int i=;i<cnt2;i++)
{
dpb[i][]=;
for(int j=;j<=k;j++)
{
dpb[i][j]=dpb[i-][j]+dpb[i-][j-]*(b[i]-j+);
}
}
ll sum=;
for(int i=;i<=k;i++)
{
sum+=dpa[cnt1-][i]*dpb[cnt2-][k-i];
}
cout<<sum<<endl;
}
}

UVA 861 组合数学 递推的更多相关文章

  1. UVa 10943 (数学 递推) How do you add?

    将K个不超过N的非负整数加起来,使它们的和为N,一共有多少种方法. 设d(i, j)表示j个不超过i的非负整数之和为i的方法数. d(i, j) = sum{ d(k, j-1) | 0 ≤ k ≤ ...

  2. UVa 10520【递推 搜索】

    UVa 10520 哇!简直恶心的递推,生推了半天..感觉题不难,但是恶心,不推出来又难受..一不小心还A了[]~( ̄▽ ̄)~*,AC的猝不及防... 先递推求出f[i][1](1<=i< ...

  3. Uva 10446【递推,dp】

    UVa 10446 求(n,bcak)递归次数.自己推出来了一个式子: 其实就是这个式子,但是不知道该怎么写,怕递归写法超时.其实直接递推就好,边界条件易得C(0,back)=1.C(1,back)= ...

  4. UVa 557 (概率 递推) Burger

    题意: 有两种汉堡给2n个孩子吃,每个孩子在吃之前要抛硬币决定吃哪一种汉堡.如果只剩一种汉堡,就不用抛硬币了. 求最后两个孩子吃到同一种汉堡的概率. 分析: 可以从反面思考,求最后两个孩子吃到不同汉堡 ...

  5. UVa 1645 Count (递推,数论)

    题意:给定一棵 n 个结点的有根树,使得每个深度中所有结点的子结点数相同.求多棵这样的树. 析:首先这棵树是有根的,那么肯定有一个根结点,然后剩下的再看能不能再分成深度相同的子树,也就是说是不是它的约 ...

  6. Coin Toss(uva 10328,动态规划递推,限制条件,至少转至多,高精度)

    有n张牌,求出至少有k张牌连续是正面的排列的种数.(1=<k<=n<=100) Toss is an important part of any event. When everyt ...

  7. UVA - 11021 - Tribles 递推概率

    GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the ...

  8. 紫书 习题 10-10 UVa 1645(递推)

    除了根节点以外,有n-1个节点,然后就看n-1的因数有那些,所有因数加起来(递推)就好了. #include<cstdio> #define REP(i, a, b) for(int i ...

  9. 紫书 例题 9-4 UVa 116 ( 字典序递推顺序)

    这道题在递推方式和那个数字三角形有一点相像,很容易推出来 但是这道题要求的是字典序,这里就有一个递推顺序的问题 这里用逆推,顺推会很麻烦,为什么呢? 如果顺推的话,最后一行假设有种情况是最小值,那么你 ...

随机推荐

  1. tar.bz2

    tar -xvjf gcc-4.1.0.tar.bz2 bzip2 -d  gcc-4.1.0.tar.bz2

  2. 洛谷 U10206 Cx的治疗

    题目背景 「Cx的故事」众所周知,Cx是一个宇宙大犇.由于Cx在空中花园失足摔下,导致他那蕴含着无穷智慧的大脑受到了严重的损伤,许多的脑神经断裂.于是,Cx的wife(有么?)决定请巴比伦最好的医师治 ...

  3. Windows各个文件夹介绍

    windows文件介绍 总结 ├WINDOWS │ ├-system32(存放Windows的系统文件和硬件驱动程序) │ │ ├-config(用户配置信息和密码信息) │ │ │ └-system ...

  4. 如何修改开发板主频--迅为iMX6UL开发板

    平台:iMX6UL开发板           iMX6UL开发板 可以在文件系统中通过命令修改 CPU 运行的主频.如下图所示,使用命令“cat /sys/devices/system/cpu/cpu ...

  5. powerDesigner的name和comment转化

    name2comment.vbs '****************************************************************************** '* ...

  6. java web开发中常用的协议的使用和java-web 常见的缓冲技术

    一.DNS协议 作用将域名解析为IP   类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...

  7. 关于mysql服务突然运行不了的问题-“本地计算机上的mysql服务启动后停止,某些...”

    1.将mysql数据库的安装目录bin文件路径添加到环境的path中,为了让cmd可以直接输入下面的相关命令,不然cd到mysql的bin下也可以 2.cmd输入mysqld --initialize ...

  8. 解决chrome 批量下载器 mgblihnaaedmhhgadafknogahbgejnno 插件乱码

    找到 mgblihnaaedmhhgadafknogahbgejnno\当前版本号(0.0.1_0)\popup.html <html> <head> <meta cha ...

  9. Django考试系统(1)

    好久没更过博客了,菜是原罪.毕业设计快做完了,第一次独立做的项目(考试系统),自己摸索着做的,以前学习的好多东西都用上了,但是也都忘了,完成设计的途中又一步步的捡起来了(不知道现在还记没记得).最近着 ...

  10. 我的MySql掉队了

    本来今天高高兴兴,突然: raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)&qu ...