备战蓝桥杯---状态压缩DP基础1之棋盘问题

news2024/11/17 2:44:19

它只是一种手段,一种直观而高效地表示复杂状态的手段。

我们先来看一道比较基础的:

直接DFS是肯定不行,我们发现对某一行,只要它前面放的位置都一样,那么后面的结果也一样。

因此我们考虑用DP,并且只有0/1,我们用二进制压缩。

我们令f[i][st]表示前i行状态为st的个数。

我们易得状态转移方程为:f[i][st]=\sum f[i-1][st'](第i行放在第j列)

同时我们保证(st'&(1<<(j-1))==0&&st'+1<<(j-1)==st。

但是我们会遇到一个问题:怎么枚举st?

其实,我们可以不用二维数组,从1二进制枚举到1<<(n)-1,因为得到它的肯定比他小,肯定是计算过的,因此我们可以这么做,这里假设状态为1101,那我们如何获得1100,1001,0101呢?

用lowerbit操作,x&-x就得到了X中最低位的1及其后面的0,这样子就ok了。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,dp[1<<20],bu[25],x,y;
int lowerbit(int x){
	return (x&(-x));
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&x,&y);
		bu[x]+=1<<(y-1);
	}
	int j,cnt;
	dp[0]=1;
	for(int i=1;i<=((1<<n)-1);i++){
		j=i;
		cnt=0;
		while(j!=0){
			j-=lowerbit(j);
			cnt++;
		}
		j=i;
		while(j!=0){
			int fk=lowerbit(j);
			if((fk&bu[cnt])==0){
				dp[i]+=dp[i^fk];
			}
			j-=fk;
		}
	}
	cout<<dp[(1<<n)-1];	
}

让我们看看比较有意思的题吧:

首先,如果我们一个一个看DFS的话,我们会发现第二个位置不像八皇后范围很容易确认+81个格子,时间不允许,用一般的DP实现起来很麻烦,因为当我们要放一个国王时,我们还得知道能不能放,即不满足无后效性。

于是我们可以换一种思路:

我们一行一行看,这样子,当我们放当前行时,关注的只有上一行,而在这一行只要不相邻即可。

我们令放了国王为1,没放为0.

现在我们看是否合法:

1.同一行不相邻:(x&(x<<1))==0(注意加括号)

2.如果上一行的状态为x,当前为y,xy要满足什么条件合法?

(x&y)==0 (x&(y<<1))==0 (x&(y>>1))==0

因此,我们令f[i][j][k]表示第i行,状态为k时已经放了j个的方案数;

易得状态转移方程:

f[i][j][k]+=f[i-1][j-num(k)][p](k自己合法,p也合法,(k&p)==0 (k&(p<<1))==0 (k&(p>>1))==0)

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,num[1500];
long long dp[10][90][1000];
int calc(int num){
    int ans=0;
    while(num!=0){
        if((num&1)==1) ans++;
        num>>=1;
    }
    return ans;
}
int main(){
    cin>>n>>k;
    dp[0][0][0]=1;
    for(int i=0;i<(1<<n);i++){//打表
        num[i]=calc(i);
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<=k;j++){
            for(int st=0;st<(1<<n);st++){
                if((st&(st<<1))!=0) continue;
                if(num[st]>j) continue;
                for(int p=0;p<(1<<n);p++){
                    if((p&(p<<1))!=0) continue;
                    if((p&(st<<1))!=0) continue;
                    if((p&(st>>1))!=0) continue;
                    if((p&(st))!=0) continue;
                    dp[i][j][st]+=dp[i-1][j-num[st]][p];
                }
            }
        }
    }
    long long ans=0;
    for(int st=0;st<(1<<n);st++){
        ans+=dp[n][k][st];
    }
    cout<<ans;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1482402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【three.js】搭建本地静态服务器 查询API文档使用

目录 一、为什么要搭建本地静态服务器呢&#xff1f; 二、下载three.js文件包 三、vscode配置live-server插件 一、为什么要搭建本地静态服务器呢&#xff1f; 平时学习Three.js&#xff0c;如果你想预览代码3D效果、查询API文档等&#xff0c;咱们需要提供一个本地静态服务…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第12章 项目质量管理(五)

博主2023年11月通过了信息系统项目管理的考试&#xff0c;考试过程中发现考试的内容全部是教材中的内容&#xff0c;非常符合我学习的思路&#xff0c;因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家&#xff0c;希望更多的人能够通过考试&a…

​​Procedural Sky - Builtin LWRP URP - Jupiter

Jupiter是一个轻量级的单通道着色器,可帮助您立即创建动态天空盒,深度关注低多边形和风格化场景,可在桌面、移动和VR应用程序上运行良好,为您节省大量时间和精力! Jupiter完全支持轻量级、通用和内置渲染管道,并提供各种设置供您自定义。这些功能可以通过简单的切换轻松打…

【OpenGL编程手册-04】详细解释着色器

着色器 目录 一、说明二、着色器语言GLSL2.1 典型的着色器代码2.2 数据类型2.2.1 向量 2.3 输入与输出2.3.1 顶点着色器2.3.2 片段着色器 2.4 Uniform2.5 函数后缀含义2 .6 更多属性&#xff01; 三、我们自己的着色器类四、从文件读取五、 编译着色器练习 一、说明 在Hello T…

IK分词器的入门使用

目录 1. 前言2. IK分词器的特点3. 引入IK分词器的依赖4. 示例代码5.结论 1. 前言 中文分词是将连续的中文文本切分成一个个独立的词语的过程&#xff0c;是中文文本处理的基础。IK分词器是一个高效准确的中文分词工具&#xff0c;采用了"正向最大匹配"算法&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

c++_leetcode_寻找峰值

目录 一、寻找峰值的示例 二、官方实现代码及解释 1、官方测试结果&#xff1a; 2、代码解释&#xff1a; 3、解题思路&#xff1a; 三、我的暴力解决 1、测试一&#xff1a; 2、测试二&#xff1a; 3、最终“暴力求解”代码&#xff1a; 4、官网提交测试通过&#xf…

Vue中<style scoped lang=“scss“>的含义

这段代码中的<style scoped lang"scss">是HTML和Vue框架结合使用时常见的一个模式&#xff0c;具体含义如下&#xff1a; scoped&#xff1a;这是一个Vue.js特有的属性&#xff0c;用来指定样式只应用于当前组件的元素。没有这个属性时&#xff0c;样式会全局应…

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

一、多态 对象多态多态是在继承/实现情况下的一种现象&#xff0c;表现为对象多态和行为多态。 对象多态&#xff1a;一个人可以是学生也可以是老师&#xff0c;学生和老师都是人的子类&#xff0c;创建人对象让其指向不同的对象&#xff0c;称为对象多态&#xff0c;这里是向…

springcloud:3.1介绍雪崩和Resilience4j

灾难性雪崩效应 简介 服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。 原因 1.服务提供者不可用(硬件故障、程序bug、缓存击穿、用户大量请求) 2.重试加大流量(用户重试,代码逻辑重试) 3.服…

NebulaGraph入门

感谢阅读 官方文档链接NebulaGraph简介nGQLnGQL简介占位标识符和占位符值注释实列大小写区分关键字 基本概念以及相关代码实现补充说明图空间语法以及列子创建克隆官方示例代码(创建并克隆)USE语句指定图空间时查看所有SPACESPACE详情CLEAR SPACE删库跑路&#xff08;看玩笑的说…

CPU,ISA架构,CPU位数与内存

CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09;是计算机系统中的主要组件之一&#xff0c;负责执行程序指令并进行数据处理。我们之前已经介绍了CPU与冯诺依曼机CPU与冯诺依曼机-CSDN博客&#xff0c;而ISA&#xff08;Instruction Set Architectu…

EasyRecovery数据恢复软件2024最新版包括Windows和Mac

EasyRecovery数据恢复软件适用于多种环境和使用场景。首先&#xff0c;它适用于各种操作系统&#xff0c;包括Windows和Mac。无论用户使用的是哪种操作系统&#xff0c;都可以使用该软件进行数据恢复。 其次&#xff0c;EasyRecovery支持从各种存储设备和媒介中恢复数据&#…

CleanMyMac X2024免费Mac电脑清理和优化工具

CleanMyMac X是一款专业的 Mac 清理和优化工具&#xff0c;它具备一系列强大的功能&#xff0c;可以帮助用户轻松管理和维护他们的 Mac 电脑。以下是一些关于 CleanMyMac X 的主要功能和特点&#xff1a; 智能清理&#xff1a;CleanMyMac X 能够智能识别并清理 Mac 上的无用文件…

WPF真入门教程30--顺风物流单据管理系统

1、教程回顾 到现在为止&#xff0c;真入门系列教程已完成了29刺由浅入深地讲解&#xff0c;当然不可能讲到了WPF的所有技能点&#xff0c;但读者看到了wpf的内部各种功能及之间的联系&#xff0c;在此基础上&#xff0c;提供一个完整有效的综合项目&#xff0c;本项目采用的是…

汽车虚拟仿真技术的实现、应用和未来

汽车虚拟仿真技术是一种利用计算机模拟汽车运行的技术&#xff0c;以实现对汽车行为的分析、评估和改进。汽车虚拟仿真技术是汽车工业中重要的开发设计和测试工具&#xff0c;可以大大缩短产品研发周期、降低研发成本和提高产品质量。本文将从汽车虚拟仿真技术的实现过程、应用…

Sora:云端启航

2024年2月16日&#xff0c;OpenAI发布了“文生视频”&#xff08;text-to-video&#xff09;的大模型工具&#xff0c;Sora&#xff08;利用自然语言描述&#xff0c;生成视频&#xff09;。王炸消息一出&#xff0c;全球都再次被OpenAI震撼了。AI视频的高度一下子被Sora拉高了…

【论文阅读】《Graph Neural Prompting with Large Language Models》

文章目录 0、基本信息1、研究动机2、创新点3、准备3.1、知识图谱3.2、多项选择问答3.3、提示词工程&#xff08;prompt engineering&#xff09; 4、具体实现4.1、提示LLMs用于问答4.2、子图检索4.3、Graph Neural Prompting4.3.1、GNN Encoder4.3.2、Cross-modality Pooling4.…

《无线网络技术》考试版笔记

第一章 无线网络介绍 什么是多径效应&#xff0c;如何去克服&#xff1a; 在发射机和接收机之间没有明显的直线路径时&#xff0c;就会产生多径传播。如果两个信号彼此叠加&#xff0c;那么接收设备就无法正确解调信号&#xff0c;无法还原为它的原始数据形式。 可以稍微调整接…

Android修行手册-Chaquopy中opencv、numpy的初步应用

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…