动态规划进阶

news2024/10/2 6:42:56

文章目录

  • 状压dp
    • 小国王
    • 玉米田
    • 炮兵阵地

状压dp

小国王

在这里插入图片描述
在这里插入图片描述

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class Main{
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static int n = 0, k = 0; //棋盘行数 国王个数
  	static int cnt = 0;  //同一行的合法状态个数
  	static int[] s = new int[1 << 12]; //同一行的合法状态集
  	static int[] num = new int[1 << 12]; //每个合法状态包含的国王数
  	static long[][][] dp = new long[12][144][1 << 12];  //前i行放了j个国王,第i行第a个状态时的方案数
	public static void main(String[] args) throws IOException {
		String[] nk = br.readLine().split(" ");
		n = Integer.parseInt(nk[0]);
		k = Integer.parseInt(nk[1]);
		
		//预处理
		for(int i = 0; i < (1 << n); i++) {
			if((i & i >> 1) == 0) { //不存在相邻的1
				s[cnt++] = i; //保存此合法状态
				for(int j = 0; j < n; j++) {
					num[i] += (i>>j&1); //统计每个合法状态包含1(国王)的个数
				}
			}
		}
		
//		System.out.println(cnt);
//		for(int i = 0; i < cnt; i++) {
//			System.out.println(Integer.toBinaryString(s[i]) + " " +num[s[i]]);
//		}
		
		//DP
		dp[0][0][0] = 1; //不放国王也是一种状态
		for(int i = 1; i <= n + 1; i++) {//枚举行
			for(int j = 0; j <= k; j++) { //枚举国王数
				//枚举国王数
				for(int a = 0; a < cnt; a++) { //枚举第i行合法状态
					for(int b = 0; b < cnt; b++) {
						int c = num[s[a]]; //第i行第a个状态的国王数
						//可以继续放国王,不存在同列的1,不存在斜对角的1
						if((j >= c) && ((s[b] & s[a]) == 0) && ((s[b] & (s[a] << 1)) == 0) && ((s[b]&(s[a]>>1)) == 0)) {
							dp[i][j][a] += dp[i-1][j-c][b];
						}
					}
				}
			}
			
		}
		System.out.println(dp[n+1][k][0]);
		
	}
}

玉米田


在这里插入图片描述
在这里插入图片描述

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class Main{
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
	static int mod = (int) 1e9;
	static int n = 0, m = 0; //
	static int[][] a = new int[15][15];
	static int[] g = new int[15]; //各行土地的状态值
  	static int cnt = 0;  //同一行的合法状态个数
  	static int[] s = new int[1 << 14]; //同一行的合法状态集
  	static long[][] dp = new long[15][1 << 15];  //种植了前i行,第i行第a个状态时的方案数
	public static void main(String[] args) throws IOException {
		String[] nm = br.readLine().split(" ");
		n = Integer.parseInt(nm[0]);
		m = Integer.parseInt(nm[1]);
		//预处理
		for(int i = 1;i <= n; i++) {
			String[] aa = br.readLine().split(" ");
			for(int j = 1; j <= m; j++) {
				a[i][j] = Integer.parseInt(aa[j - 1]);
			}
		}
		
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j <= m; j++) {
				int x = a[i][j];
				g[i] = (g[i] << 1) + x;
			}
			// System.out.println(g[i]);
		}
		for(int i = 0; i < (1 << m); i++) {
			if((i&i >> 1)==0) {
				s[cnt++] = i;//保存一行的合法状态
			}
		}
	
		dp[0][0] = 1;
		for(int i = 1; i <= n + 1; i++) {
			for(int a = 0; a < cnt; a++) { //第i行
				for(int b = 0; b < cnt; b++) { //第i-1行状态
					//a种在可以种的地方,a b没有相邻的1
					if((s[a] & g[i]) == s[a] && (s[a] & s[b]) == 0) {
						dp[i][a] = (dp[i][a] + dp[i-1][b])%mod;
					}
					
				}
			}
		}
		//等价于只在1~n行种植
		System.out.println(dp[n+1][0]);
	}
}

炮兵阵地


在这里插入图片描述

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

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

相关文章

Day25力扣刷題

131.分割回文串 此題思維和前幾題不一樣&#xff0c;思維容量更大&#xff0c;主要在於返回的時候&#xff0c;還是會取值。 運行代碼&#xff1a; class Solution:def partition(self, s: str) -> List[List[str]]:result[]tt[]def backtrack(s,index):if len(s)index:res…

node.js PM2部署项目

pm2 是什么 pm2 是一个守护进程管理工具,它能帮你守护和管理你的应用程序。通常一般会在服务上线的时候使用 pm2 进行管理。本文围绕以下重点进行讲解&#xff1a;安装pm2&#xff1b;命令行部署到PM2&#xff1b;PM2查看日志等命令&#xff1b;PM2进行负载均衡&#xff1b;PM…

Python心经(4)

这节记录一些内置模块的使用 目录 hashlib模块&#xff0c;&#xff0c;加密用 json模块 os模块 一个实用的案例&#xff1a; os模块的找文件的操作 随机生成random模块 时间相关模块 time&#xff0c;datetime hashlib模块&#xff0c;&#xff0c;加密用 以md5加密…

什么是Spring Cache?Spring项目如何使用?

前言 目前Spring Cloud微服务在Web项目中占据了主流地位&#xff0c;如果去面试关于Spring Cloud的岗位时&#xff0c;面试官一般都会提问你的项目是如何优化的&#xff0c;从哪些方面入手去优化。而缓存技术绝对是项目必不可少的&#xff0c;所以我们必须掌握好Java项目的缓存…

unity 3种办法实现血条效果并实现3d世界血条一直看向摄像机

普通血条栏: 渐变色血条栏: 缓冲血条栏: 3D场景血条栏跟随玩家移动: 普通血条栏: 在Canvas下创建一个空物体HP bar,在空物体下方创建3个Image,分别为血条框bar 黑色,最大HP maxHP 白色,和当前HP currentHP 红色。(PS:注意先后顺序以调整显示的图层) 效果: …

java中排序

1.传统比较器格式 2.stream 3.结果 4.源码 List<String> list Arrays.asList("201305", "200305", "199009", "200208");Collections.sort(list, new Comparator<String>() {Overridepublic int compare(String o1, Stri…

SpringMVC 万字通关

文章目录 1. 什么是 Spring MVC?1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系 2. Spring MVC 有什么用 ?3. 如何学 Spring MVC ?3.1 Spring MVC 的创建3.2 实现连接功能3.2.1 RquestMapping 详解1. RequestMapping 支持什么请求?2. 请求限定3. GetMapping 和 PostMapping4. c…

Sharding-Sphere系列-主从配置和分库分表

主从配置和分库分表 Sharding-Sphere组成 Sharding-JDBC Sharding-Proxy Sharding-Sidecar&#xff08;TODO&#xff09; Sharding-JDBC表的概念 逻辑表 广播表 绑定表 Sharding-JDBC中的分片策略 自动分片算法 标准分片算法 复合分片算法 自定义分片算法 分布式…

Mybatis-Plus 自动属性填充与自定义Insert into语句顺序

前言&#xff1a;系统中使用了Mybatis-Plus 自动属性填充为实体统一进行属性的填值&#xff0c;在Mapper的xml 文件中 insert into 语句 使用 <if test"id ! null">id,</if> 进行判断会发现该属性是空的&#xff0c;明明已经为改字段进行了属性的自动填充…

百度2023年Q1财报解析:AI+生态战略加速助推

原创 | 文 BFT机器人 01 百度靠AI实现翻身 &#xff08;一&#xff09;盈利能力 百度凭借着强大的AI能力&#xff0c;成功地实现了从依赖搜索业务的互联网公司到AI公司的转型。 从盈利能力层面上看&#xff0c;在第一季度&#xff0c;百度实现了营收311.44亿元&#xff0c;同比…

unity愤怒的小鸟学习制作(二)

终于又开始了啦啦啦&#xff0c;我有一个自己的相机了&#xff0c;真开心&#xff0c;诶嘿 视频链接和素材如下&#xff1a;视频 小鸟的飞出 想要让小鸟在拉开弹弓之后能飞出去&#xff0c;就必须让这个组件失活&#xff0c;如下 所以我们更改脚本内容&#xff0c;加入&#…

HarmonyOS应用端云一体化开发主要流程

图示 主要步骤 序号 阶段 任务 说明 1 创建端云一体化开发工程 选择工程类型与云开发模板 确定工程类型&#xff1a;选择“Application”或“Atomic Service”页签&#xff0c;确定创建的是HarmonyOS应用工程还是原子化服务工程。选择云开发模板&#xff0c;包括通用云开…

【FMC202】基于FMC标准的1路CameraLink Full 输入、1路DVI输出 子卡模块

产品概述 FMC202是一款基于FMC接口标准的1路CameraLink Full模式&#xff08;或者2路CameraLink Base模式&#xff09;采集、1路HDMI&#xff08;DVI&#xff09;视频输出的子卡模块&#xff0c;该模块具有2个CameraLink端口&#xff08;SDR&#xff0c;26PIN&#xff09;&…

Docker部署apache superset

使用Docker compose在docker中部署Apache Superset 说明&#xff1a;部署步骤按照superset官网说明总结而来-2023年 1、第一步安装docker 、docker compose。 这里我选择手动下载rpm包&#xff0c;然后yum install *.rpm方式来安装。 下载地址&#xff1a;https://download.…

MADDPG-学习笔记(2)

注意&#xff1a;进行本文的实验前&#xff0c;为了加快训练速度&#xff0c;进行了参数调整 num-episodes&#xff1a;由60000改成了10000 lr:由0.01改成了0.1 batch-size:由1024改成了32 1.报错 1.1 AttributeError: Scenario object has no attribute benchmark_data …

ApiKit 介绍及基本用法

1、ApiKit介绍及下载 ApiKitAPI 管理 Mock 自动化测试 异常监控 团队协作 结合 API 设计、文档管理、自动化测试、监控、研发管理和团队协作的一站式 API 生产平台&#xff0c;从个人开发者到跨国企业用户&#xff0c;Apikit 帮助全球超过50万开发者和10万家企业更快、更好…

【Flutter】Flutter CLI (2):调试分析项目 flutter analyze 命令详解

文章目录 一、前言二、对现有项目进行分析和调试1. flutter analyze2. 修改代码暴露错误3. 再次执行flutter analyze4. 调试模式运行代码 flutter run三、本文涉及命令的完整说明1.flutter analyze四、总结一、前言 在上一篇文章中,我们对 Flutter CLI 的命令进行了分类,并通…

Array的扩展方法(from、find、findlndex、includes)

Array.from() 构造函数方法:Array.from() 将类数组或可遍历对象转换为真正的数组 示例 <script>// 构造函数方法:Array.from()// 将类数组或可遍历对象转换为真正的数组let arr {0: a,1: b,2: c,length: 3,};let arr1 Array.from(arr);console.log(arr1);//["…

对回溯的理解与思考(从决策树遍历角度分析)

对于回溯的经典问题&#xff0c;就是全排列和各种各样全排列的变体和八皇后问题。 算法框架 对于回溯算法框架。其实解决一个回溯问题&#xff0c;实际上就是一个决策树的遍历过程。 这也就是为什么在刷算法题之前&#xff0c;一定要从树的题目开始刷&#xff0c;后期可以很方…

检索 COM 类工厂中 CLSID 为 {} 的组件失败, 内存资源不足,无法处理此命令

如果您收到ERROR_NOT_ENOUGH_MEMORY消息&#xff0c;提示没有足够的存储空间来处理此命令描述&#xff0c;请按照本文中列出的故障排除步骤进行修复。 此错误代码影响Windows服务器&#xff0c;导致系统崩溃&#xff0c;并在错误日志中显示“没有足够的存储空间来处理此命令”。…