acwing 1064 小国王 线性状态压缩DP

news/2024/10/17 12:37:00/

在这里插入图片描述
输入

3 2

输出

16

🍺 AC code

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>using namespace std;typedef long long ll;
const int N = 12;
const int M = 1 << 10, K = 110;//k表示国王数
int n,m;
vector<int> state;//存储所有单行合法状态
int id[M];//存的是每一个状态和这个它的下标之间的对应关系
vector<int> head[M];//记录每个状态可以转到哪些其他的状态
int cnt[M];//记录状态 i 里边 1 的个数ll f[N][K][M];bool check(int state)
{for(int i = 0; i < n; i++)if((state >> i & 1) && (state >> (i + 1) & 1))return false;return true;
}
// 计算 state 二进制 里边有多少个 1
int count(int state )
{int res = 0;for(int i = 0; i < n; i++)res += state >> i & 1;return res;
}int main(){cin >> n >> m;// n是 棋盘边长,m是 国王个数//	预处理单行合法状态for(int i = 0; i < 1 << n; i++)if(check(i)){state.push_back(i);id[i] = state.size()-1;//id存的是 状态 i 所对应的state下标cnt[i] = count(i); 		}//	预处理状态之间是否可以转移(即上一行状态和下一行状态是否冲突)for(int i = 0; i < state.size(); i++)// i是当前状态的下标for(int j = 0; j < state.size(); j++)// j 是下一个状态的下标{int a = state[i];int b = state[j];
//			没有冲突的1			没有连续的两个 1if((a & b) == 0 && check(a | b))//合法head[i].push_back(j);//表示 i 下边可以接 j}//	开始DPf[0][0][0] = 1;for(int i = 1; i <= n+1; i++)// i 表示行数for(int j = 0; j <= m; j++)// j 表示国王数for(int a = 0; a < state.size(); a++)// a 表示第 i 行状态的下标for(int b = 0; b < head[a].size(); b++)// b 表示第 i+1 可能转移到的状态{int c = cnt[state[a]];//c 记录 第i行状态 state[a]中 1 的个数
//			第 i 行采取k状态表示 会 放置 c 个国王,当前状态 f[i][j][k] 表示前i层放置了 j 个国王
//			所以 c 的上限是 jif(j >= c)f[i][j][a] += f[i-1][j-c][head[a][b]];}cout << f[n+1][m][0] << endl;return 0;
}

👨‍🏫 参考题解


http://www.ppmy.cn/news/998269.html

相关文章

【外卖系统】菜品信息分页查询

需求分析 当菜品数据很多时&#xff0c;用分页的形式来展示列表数据 代码开发 页面发送ajax请求&#xff0c;将分页查询参数提交到服务端&#xff0c;获取分页数据页面发送请求&#xff0c;请求服务端进行图片下载&#xff0c;用于页面图片展示 构造分页 注意&#xff1a;…

2023年7月CSDN客服月报|解决3个重大问题和25个次要问题,处理4个用户需求及建议

听用户心声&#xff0c;解用户之需。hello&#xff0c;大家好&#xff0c;这里是《CSDN客诉报告》第22期&#xff0c;接下来就请大家一同回顾我们7月份解决的bug&#xff5e; 一、重大问题 1、【小程序】会员小程序签到余额及转盘余额未到账 反馈量&#xff1a;14 问题描述…

opencv04-掩膜

opencv04-掩膜 抠图 #include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <vector> #include <array> #include <algorithm>using namespace std; using namespace cv;int main() {str…

P3373 【模板】线段树 2(乘法与加法)(内附封面)

【模板】线段树 2 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面三种操作&#xff1a; 将某区间每一个数乘上 x x x&#xff1b;将某区间每一个数加上 x x x&#xff1b;求出某区间每一个数的和。 输入格式 第一行包含三个整数 n , q , m n,q,m n,…

aws中opensearch 日志通(Centralized Logging with OpenSearch)2.0(一)

aws日志通2.0 实现全面的日志管理和分析功能 一体化日志摄取 &#xff1a;把aws服务器日志和应用日志传输到opensearch域中无代码日志处理 &#xff1a;在网页控制台中就可以实现数据处理开箱即用 &#xff1a;提供可视化模版&#xff08;nginx、HTTP server &#xff09; 架构…

自定义MVC增删改查

目录 mymvcdemo是自定义mvc框架的使用示例 1.1 实体类 1.2 dao方法 1.3 写Service / biz 三层架构 1.4 建action 相当于selvert 1.5 con连接MySQL 8.0 版本 1.6 配置文件 XML 1.7 主界面布局 1.8 增加界面布局 1.9 写tld配置文件 2.0 注意架包 我是已经打包好的 mymv…

Expectation (Easy Version) 2023“钉耙编程”中国大学生算法设计超级联赛(5)hdu7330

Problem - 7330 题目大意&#xff1a;有n次游戏&#xff0c;每次游戏有a/b的概率获胜&#xff0c;且相互独立&#xff0c;如果当前赢了cnt次游戏&#xff0c;那么这次游戏会赢得的分数&#xff0c;问最后得分的期望 1<n<1e6;1<m,a<b<998244353 思路&#xff…

PHP高级检索功能的实现以及动态拼接sql

我们学习了解了这么多关于PHP的知识&#xff0c;不知道你们对PHP高级检索功能的实现以及动态拼接sql是否已经完全掌握了呢&#xff0c;如果没有&#xff0c;那就跟随本篇文章一起继续学习吧! PHP高级检索功能的实现以及动态拼接sql。完成的功能有&#xff1a;可以单独根据一个…