I

I

车II

车II


题目描述

有一个

n

m

n*m

n∗m的棋盘

(

n

m

80

,

n

m

80

)

(n、m≤80,n*m≤80)

(n、m≤80,n∗m≤80)要在棋盘上放

k

(

k

20

)

k(k≤20)

k(k≤20)个棋子,使得任意两个棋子不相邻。求合法的方案总数。


输入

n

,

m

,

k

n,m,k

n,m,k


输出

方案总数


样例输入

3 3 2

样例输出

24

题目解析

又双叒叕是一道状压DP的题。和相比,这道题的数据就大了许多

n

m

80

n、m≤80

n、m≤80。然而

n

m

80

n*m≤80

n∗m≤80,所以还是可以用状压来写。
首先,我们用一个

D

F

S

DFS

DFS来枚举他所有的状态

void dfs(int ans, int pos, int flag)
{
if(pos>n)
{
s[++num]=ans;
c[num]=flag;
return ;
}
dfs(ans, pos+1, flag);
dfs(ans+(1<<pos-1), pos+2, flag+1);
}

然后就开始

D

P

DP

DP;用两个变量来枚举状态,分别为当前状态和转移状态,要想它们之间能够互相转移,就必须有一个为

0

0

0,然后在枚举放的棋子个数。


code

#include<stdio.h>

#include<iostream> 

#include<algorithm>

using namespace std;

int n, m, k, num;
int s[10005], c[10005], f[85][1<<9][255]; void dfs(int ans, int pos, int flag)
{
if(pos>n)
{
s[++num]=ans;
c[num]=flag;
return ;
}
dfs(ans, pos+1, flag);
dfs(ans+(1<<pos-1), pos+2, flag+1);
} int main ()
{
scanf ("%d%d%d", &n, &m, &k);
if (n>m) swap(n,m);
dfs(0, 1, 0);
for (int i=1; i<=num; ++i) f[1][s[i]][c[i]]=1;
for (int i=2; i<=m; ++i)
for (int j=1; j<=num; ++j)
for (int r=1; r<=num; ++r)
if (!(s[j]&s[r]))
{
for (int l=0; l<=k; ++l)
if (l>=c[j])
f[i][s[j]][l]+=f[i-1][s[r]][l-c[j]];
}
int ans=0;
for (int i=1; i<=num; ++i) ans+=f[m][s[i]][k];
printf("%d",ans);
return 0;
}

[状压DP]车II的更多相关文章

  1. [状压DP]车

    车 车 车 题目描述 在 n ∗ n n*n n∗n( n ≤ 20 n≤20 n≤20)的方格棋盘上放置 n n n个车(可以攻击所在行.列),有些格子不能放,求使它们不能互相攻击的方案总数. 输入 ...

  2. 状压DP【p2622】 关灯问题II

    题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...

  3. 关灯问题II 状压DP

    关灯问题II 状压DP \(n\)个灯,\(m\)个按钮,每个按钮都会对每个灯有不同影响,问最少多少次使灯熄完. \(n\le 10,m\le 100\) 状压DP的好题,体现了状压的基本套路与二进制 ...

  4. [状压DP]关灯问题II

    关 灯 问 题 I I 关灯问题II 关灯问题II 题目描述 现有n盏灯,以及 m m m个按钮.每个按钮可以同时控制这 n n n盏灯--按下了第 i i i个按钮,对于所有的灯都有一个效果.按下i ...

  5. HDU 6149 Valley Numer II 状压DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意:中文题目 解法:状压DP,dp[i][j]代表前i个低点,当前高点状态为j的方案数,然后枚 ...

  6. HDU 6149 Valley Numer II(状压DP)

    题目链接 HDU6149 百度之星复赛的题目……比赛的时候并没有做出来. 由于低点只有15个,所以我们可以考虑状压DP. 利用01背包的思想,依次考虑每个低点,然后枚举每个状态. 在每个状态里面任意枚 ...

  7. 洛谷 P2622 关灯问题II【状压DP】

    传送门:https://www.luogu.org/problemnew/show/P2622 题面: 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的 ...

  8. 状压dp专题复习

    状压dp专题复习 (有些题过于水,我直接跳了) 技巧总结 : 1.矩阵状压上一行的选择情况 \(n * 2^n\) D [BZOJ2734][HNOI2012]集合选数 蒻得不行的我觉得这是一道比较难 ...

  9. [状压DP]炮兵阵地

    炮 兵 阵 地 炮兵阵地 炮兵阵地 题目描述 司令部的将军们打算在 N ∗ M N*M N∗M的网格地图上部署他们的炮兵部队.一个 N ∗ M N*M N∗M的地图由 N N N行 M M M列组成, ...

随机推荐

  1. Typescript All In One

    Typescript All In One TypeScript 3.5 is now available. https://www.typescriptlang.org/#download-link ...

  2. VAST上线后,如何提升NGK算力生态的收益和流动性?

    自比特币诞生以来,"挖矿"一词就成功地步入了大众的视野,也成为了加密货币领域最重要的组成部分之一.无论是早前基于比特币和以太坊为主的算力挖矿,还是逐步进入大众视野的质押挖矿,亦或是 ...

  3. Chateau Renice酒庄 :忠于风味,尊重自然

    Chateau Renice酒庄(公司编号:20151318780)凭借优良的葡萄栽培传统.卓越的酿酒技术以及独特风味的葡萄酒,近年来葡萄酒畅销至全球. Chateau Renice酒庄将葡萄酒出口至 ...

  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(四)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...

  5. webpack4.X核心工具库之tapable实例对象Hook

    一.tapable简介 tapable为webpack底层的核心工具库,webpack许多功能的实现都是跟它密不可分的,webpack的编译流程为配置初始化--->内容编译--->输出编译 ...

  6. 第30天学习打卡(异常概述 IO流概述)

    异常概述 即非正常情况,通俗的说,异常就是程序出现的错误 异常的分类(Throwable) 异常(Exception) 合理的应用程序可能需要捕获的问题 举例:NullPointerException ...

  7. 痞子衡嵌入式:FlexSPI复位方式不当会导致i.MXRT系列下OTFAD加密启动失败

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是FlexSPI复位方式不当会导致i.MXRT系列下OTFAD加密启动失败问题. 本篇是<系统时钟配置不当会导致i.MXRT1xxx ...

  8. 180. 连续出现的数字 + MySql + 连续出现数字 + 多表联合查询

    180. 连续出现的数字 LeetCode_MySql_180 题目描述 代码实现 # Write your MySQL query statement below select distinct t ...

  9. KL散度相关理解以及视频推荐

    以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频. 假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分 ...

  10. ASP.NET Core扩展库

    亲爱的.Neter们,在我们日复一日的编码过程中是不是会遇到一些让人烦恼的事情: 日志配置太过复杂,各种模板.参数也搞不清楚,每次都要去查看日志库的文档,还需要复制粘贴一些重复代码,好无赖 当需要类型 ...