首页 > 其他分享 >小国王 骑士 状态压缩DP

小国王 骑士 状态压缩DP

时间:2024-07-05 10:31:27浏览次数:12  
标签:输出 false int 压缩 国王 return 骑士 check2 DP

// 小国王.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>


using  namespace  std;

/*
https://loj.ac/p/10170
http://ybt.ssoier.cn:8088/problem_show.php?pid=1592
在 n x n 的棋盘上放 k 个国王,国王可攻击相邻的 8 个格子,求使它们无法互相攻击的方案总数。

输入格式
只有一行,包含两个整数 n 和 k。

输出格式
每组数据一行为方案总数,若不能够放置则输出 0。

输入
3 2
输出
16

输入
4 4
输出
79

对于全部数据,1 <= n <=  10, 0 <=  k <= n^2。
*/
const int N = 12;
long long dp[N][105][1 << N];
int n, t;


int getOne(int x) {
	int ret = 0;
	while (x != 0) {
		ret++;
		x -= (x & -x);
	}

	return ret;
}

//检查是否有连续两个1
bool check2(int x) {
	int state = 0;
	while (x != 0) {
		if (x & 1 && state == 1) return true;
		state = x & 1;
		x >>= 1;
	}

	return false;
}

bool check(int a, int b) {
	if ( (a & b) != 0) 
		return false;
	if (check2(a) || check2(b) || check2(a | b)) 
		return false;
	return true;
}

vector<int> state[1 << N];
//预处理所有可以转移的状态
void gen(int n) {
	for (int i = 0; i < 1 << n; i++) {
		for (int j = 0; j < 1 << n; j++) {
			if (check(i, j)) {
				state[i].push_back(j);
			}
		}
	}
}


int main() {
	cin >> n >> t;

	gen(n);

	dp[0][0][0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int k = 0; k <= t; k++) {
			for (int prev = 0; prev < 1 << n; prev++) {
				for (auto& curr : state[prev]) {
					int oneNum = getOne(curr);
					if (oneNum + k <= t) {
						dp[i][oneNum + k][curr] += dp[i - 1][k][prev];
					}
				}
			}
		}
	}


	long long ans = 0;
	for (int i = 0; i < 1 << n; i++) {
		ans += dp[n][t][i];
	}
	cout << ans << endl;


	return 0;
}

标签:输出,false,int,压缩,国王,return,骑士,check2,DP
From: https://www.cnblogs.com/itdef/p/18285275

相关文章

  • 远程桌面协议(RDP)
    原文链接:https://zhuanlan.zhihu.com/p/679953523在信息化社会中,远程工作、协作和管理已成为常态。远程桌面协议(RemoteDesktopProtocol,简称RDP)作为一种关键技术,为用户提供了如同身临其境般的远程计算机操作体验。那么,究竟什么是RDP?它又如何赋能我们的日常工作与生活呢?揭开RDP......
  • 插头 DP
    插头DP定义基于连通性状态压缩的DP.一个方向的插头存在表示这个格子在这个方向可以与外面相连。状态一个\(n\timesm(n,m\le12)\)的棋盘,有的格子是障碍,问共有多少满足要求的回路?本题中,所有非障碍格子一定是从一个插头进、一个插头出,刚好用两个插头,方案数为\(C_......
  • TPAMI 2024 | 压缩SDR到HDR视频重构
    题目:Compressed-SDRtoHDRVideoReconstruction压缩SDR到HDR视频重构作者:HuWang;MaoYe;XiatianZhu;ShuaiLi;XueLi;CeZhu源码链接:https://wanghu178.github.io/KPNet/摘要新一代的有机发光二极管(OLED)显示器设计用于支持高动态范围(HDR),超越了传统显示......
  • powershell遍历文件夹压缩以及编写生成k3配置
    Add-Type-AssemblyNameSystem.IO.CompressionAdd-Type-AssemblyNameSystem.IO.Compression.FileSystem#设置源文件夹和目标日志文件的路径$sourceFolder="C:\myapp\bin"$destFolder="C:\myapp\OutPut\"$logFilePath="C:\myapp\log.x......
  • 【GZIP压缩的二进制数据】
    目录方案概览欢迎关注微信公众号:数据科学与艺术作者WX:superhe199直接在自定义协议中嵌入GZIP压缩的二进制数据需要确保数据能够跨系统边界正确传输。这意味着,你需要在JSON之外定义一种方式来标记二进制数据的开始和结束,以及可能的长度信息。由于标准JSON不直接支......
  • Intel DPC++安装与使用
    IntelDPC++安装与使用 DPC++(DataParallelC++)是Intel公司使用oneAPI实现的SYCL和SYCL编译器,这里记录一下V100服务器安装DPC++过程下载安装DPC++编译器前往官网下载地址,左侧选择Compilers->Intel®oneAPIDPC++/C++CompilerandIntel®C++CompilerClassic,选择目前最......
  • WPF Datagrid ContextMenu MenuItem Command CommandParameter MultiBinding
     //xaml<Windowx:Class="WpfApp194.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas......
  • UDP套接字基础总结
    最近和同学做一个有趣的实验,大致场景是:将摄像头连接到树莓派上,在树莓派上编写代码来捕获摄像头传回的数据。在这个场景中,树莓派是服务器端,摄像头是客户端,传递数据采用的协议是UDP。实验过程中发现自己对UDP套接字的使用有些不熟练,于是做一个总结。编程语言采用C,参考资料为《TCP/I......
  • CF1039D You Are Given a Tree (树形 dp + 贪心 + 根号分治)
    CF1039DYouAreGivenaTree树形dp+贪心+根号分治题目是一个经典问题,可以用树形dp和贪心解决。设\(f_u\)表示以\(u\)节点为端点能够剩下的最长路径。考虑从叶子节点往上合并贪心,那么如果能够合并出包含\(u\)节点的大于等于\(k\)的路径,那么就合并,\(f_u=0\);否......
  • 【Python】基于动态规划和K聚类的彩色图片压缩算法
    引言当想要压缩一张彩色图像时,彩色图像通常由数百万个颜色值组成,每个颜色值都由红、绿、蓝三个分量组成。因此,如果我们直接对图像的每个像素进行编码,会导致非常大的数据量。为了减少数据量,我们可以尝试减少颜色的数量,从而降低存储需求。1.主要原理(一)颜色聚类(ColorClusterin......