loj10170
在 n×n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。
----------------------------------------------------------------------------------------------------------------------
状态压缩DP
首先选出可用的状态
然后进行动归。
f[i][s][k]:表示到第i行,第i行的状态为st[s]的情况下,放置了k个国王的方案数。
f[i][s][k]=sum(f[i-1][S][k-cs[s]]),条件是状态st[s]和st[S]不冲突。
第一次没有开LONGLONG,于是进行了替换!!比较暴力!!!
----------------------------------------------------------------------------------------------------------------------
代码:
1 #include<bits/stdc++.h>
2 using namespace std;
3 long long n,k;
4 long long st[1<<10+5],js,cs[1<<10+5];
5 long long f[11][1<<10+5][105];
6 void getst(long long n)
7 {
8 for(long long i=0;i<(1<<n);++i)
9 {
10 if((i & (i<<1))==0)
11 {
12 st[js]=i;
13 long long tp=0;
14 for(long long j=0;j<n;++j)
15 if((i & (1<<j)))tp++;
16 cs[js++]=tp;
17 }
18 }
19 }
20 void dp()
21 {
22 for(long long s=0;s<js;++s)f[1][st[s]][cs[s]]=1;
23 for(long long i=2;i<=n;++i)
24 for(long long s=0;s<js;++s)
25 for(long long l=0;l<=k;++l)
26 for(long long j=0;j<js;++j)
27 if(((st[s]&st[j])==0)&&((st[s]&(st[j]>>1))==0)&&((st[s]&(st[j]<<1))==0))
28 f[i][st[s]][l]+=f[i-1][st[j]][l-cs[s]];
29 long long ans=0;
30 for(long long s=0;s<js;++s)ans+=f[n][st[s]][k];
31 cout<<ans;
32 }
33 int main()
34 {
35 cin>>n>>k;
36 getst(n);
37 dp();
38 return 0;
39 }
loj10170的更多相关文章
- Loj10170骑士
试题描述 在 n×n(1≤n≤10)的棋盘上放 k(0≤k≤n)个国王(可攻击相邻的8个格子),求使它们无法互相攻击的方案总数. 输入 输入有多组方案,每组数据只有一行为两个整数n和k. 输出 每组数 ...
随机推荐
- java Swing组件随着窗口拖动等比移动或等比放大
实现原理很简单, 1清空布局(使用绝对布局) 2添加监听器(监听窗口是否被拖动) 3在监听器里面动态调整 组件的位置 效果如下: 拖动之后效果: 代码实现: import java.awt.Event ...
- .NET Core学习笔记(8)——Entity Framework Core之Database First
曾经我以为再也不会去弄啥Database First,然鹅我错了.这个世界上就是有啪啪打脸和真香的时候.当小伙伴拿着做好的DB表结构和SQL脚本递过来的时候,我知道我没法拒绝.望着他突起的肱二头肌和充 ...
- sqlite嵌入式数据库简介及特性
p.p1 { margin: 0; font: 12px "Helvetica Neue"; color: rgba(69, 69, 69, 1) } p.p2 { margin: ...
- APP逆向案例---x会app
步骤一 抓个包 其中m_d,m_e为加密参数 步骤二(已经看了是360加固我们脱壳一下) # Author: hluwa <hluwa888@gmail.com> # HomePage: ...
- 2. C++中的引用
1. 引用的基本使用 作用:给变量起别名 语法:数据类型 &别名=原名 注意: 别名数据类型与原名数据类型一致. 引用必须初始化. 引用一旦初始化后,就不可以更改(只能作为一个变量的别名) ...
- 常用的Git命令清单
目录 名词解释 开卷必读 一. 新建代码库 二.配置 三. 忽略某个文件的改动 四. 增加/删除文件 五. 代码提交 六. 分支 七. 标签 八. 查看信息 九. 远程同步 十. 撤销 十一. Git ...
- Kafka基本原理概述
Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ngi ...
- JavaScript DOM编程艺术(第2版)的简单总结
介绍 JavaScript DOM编程艺术(第2版)主要讲述了 JavaScript.DOM 和 HTML5 的基础知识,着重讲述了 DOM 编程,并通过几个实例演示了具有专业水准的网页开发. 下面介 ...
- CSS 奇技淫巧:动态高度过渡动画
这个问题源自于掘金上的一个留言,一个朋友问到,为什么我下面这段代码的高度过渡动画失效了? 伪代码大概是这样: { height: unset; transition: all 0.3s linear; ...
- gin框架的路由源码解析
前言 本文转载至 https://www.liwenzhou.com/posts/Go/read_gin_sourcecode/ 可以直接去原文看, 比我这里直观 我这里只是略微的修改 正文 gin的 ...