SGU 220.Little Bishops(DP)
题意:
给一个n*n(n<=10)的棋盘,放上k个主教(斜走),求能放置的种类总数。
Solution:
一眼看上去感觉是状压DP,发现状态太多,没办法存下来。。。
下面是一个十分巧妙的处理:
将棋盘按照国际象棋的样子分成黑白两部分,再旋转45°,以黑色为例,一行有1,3,5,7。。。5,3,2,1个格子,
可以处理为1,1,3,3,5,5,7。。。
f[i][j]代表第i层,放了j个棋子的方案数,只要预处理出每一行可以放的个数tem[i]
f[i][j]=f[i-1][j]+f[i-1][j-1]*(tem[i]-j+1),tem[i]>=j;
同样对白色部分如此处理,最后将对应的黑白方案乘起来累加就好了。
注意答案会超过INT
code
#include <iostream>
#include <cstdio>
using namespace std; long long f[][][], ans;
int tem[];
int n, k, tol; void make (int x) {
tol = ;
for (int t = x; t <= n; t += ) {
tem[++tol] = t;
if (t != n) tem[++tol] = t;
}
f[x - ][][] = ;
for (int i = ; i <= tol; i++)
for (int j = ; j <= k; j++)
if (tem[i] >= j) f[x - ][i][j] = f[x - ][i - ][j]+f[x - ][i - ][j - ] * (tem[i] - j + );
}
int main() {
scanf ("%d %d", &n, &k);
make ();
make ();
for (int i = ; i <= k; i++)
ans += f[][tol][i] * f[][ * n - - tol][k - i];
printf ("%I64d", ans);
}
SGU 220.Little Bishops(DP)的更多相关文章
- SGU 221.Big Bishops(DP)
题意: 给一个n*n(n<=50)的棋盘,放上k个主教(斜走),求能放置的种类总数. Solution : 同SGU 220,加个高精度就好了. code #include <iostre ...
- SGU 390-Tickets(数位dp)
题意:有标号l-r的票,要给路人发,当给的票的编号的各数位的总和(可能一个人多张票)不小k时,才开始发给下一个人,求能发多少人. 分析:这个题挺难想的,参考了一下题解,dp[i][sum][left] ...
- SGU 199 Beautiful People(DP+二分)
时间限制:0.25s 空间限制:4M 题意: 有n个人,每个人有两个能力值,只有一个人的两个能力都小于另一个的能力值,这两个人才能共存,求能同时共存的最大人数. Solution: 显然这是一个两个关 ...
- SGU 134.Centroid( 树形dp )
一道入门树dp, 求一棵树的重心...我是有多无聊去写这种题...傻X题写了也没啥卵用以后还是少写好.. ----------------------------------------------- ...
- sgu 131 状压DP
棋盘覆盖(二) 时间限制:1000 ms | 内存限制:65535 KB 描述 The banquet hall of Computer Scientists' Palace has a ...
- SGU 144. Meeting 概率dp 几何概率分布 难度:0
144. Meeting time limit per test: 0.25 sec. memory limit per test: 4096 KB Two of the three members ...
- SGU 乱乱开
本解题报告 乱抄,乱写,随性随心,不喜多喷! SGU 142: 思路:一个string的字串不会超过2^20个,我们枚举出来就好了. 我出错点:数组RE #include<stdio.h> ...
- lightoj 1125 - Divisible Group Sums (dp)
Given a list of N numbers you will be allowed to choose any M of them. So you can choose in NCM ways ...
- SGU 422 Fast Typing(概率DP)
题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...
随机推荐
- HDU-4974 A simple water problem
http://acm.hdu.edu.cn/showproblem.php?pid=4974 话说是签到题,我也不懂什么是签到题. A simple water problem Time Limit: ...
- HDU-3854 LOOPS
http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others) Memo ...
- 使用LoadRunner对Web Services进行调用--Add Service Call
利用LoadRunner对Web Services进行测试时,通常有三种可供采用的方法: 在LoadRunner的Web Services虚拟用户协议中,[Add Service Call] 在Loa ...
- Selenium稳定性 Test
[Test] public void DriverExtension_Wait() { var driver = new FirefoxDriver(); driver.Navigate().GoTo ...
- DirectDraw
一.DirectDraw接口 DirectDraw接口图如下: 1.IUnknown:所有COM对象都必须从这个基本接口派生 2.IDirectDraw:这是开始使用DirectDraw时必须创建的主 ...
- ORA-12541: TNS: 无监听程序 怎么解决
ORA-12541: TNS: 无监听程序 怎么解决? 刚学 oracle ORA-12541: TNS怎么回事,已经打开了所有的服务 fzxs 2008-3-14 下载知道客户端,10分钟内有问必答 ...
- iOS设备隐藏StateBar
//隐藏StateBar - (BOOL)prefersStatusBarHidden { returnYES; }
- net user命令
net user net user 用户名 net user 用户名 密码 /add net user 用户名 /del net localgroup administrators net local ...
- [转]C语言单引号和双引号的区别
单引号和双引号在C中的意义完全不同,包围在单引号中的一个字符只是编写整数的另一种方法.这个整数是给定的字符在实现的对照序列中的一个对应的值,即ASCII码值.因此在一个ASCII实现中,‘a’和014 ...
- Archipelago - SGU 120(计算几何向量旋转)
题目大意:有一个正N边形,然后给出两个点,求出剩余的点的坐标. 分析:向量旋转可以求出坐标,顺时针旋转时候,x = x'*cos(a) + y'*sin(a), y=-x'*sin(a) + y'*c ...