当前位置: 首页 > news >正文

Acwing 周赛143 解题报告 | 珂学家 | 状压DP


前言

在这里插入图片描述


整体评价

被这个T2难住了, 幸好最后磨出来了,感觉蛮头痛的。T3是道状压题,这个反而容易写。


A. 时间

思路: 模拟

取模,但是对0要改成12

n = int(input())r = n % 12print (12 if r == 0 else r)

B. 数对推理

思路: 按题意模拟

如果一组存在歧义,则必为-1

需要从A,B两人分别去匹配

n, m = list(map(int, input().split()))arr = list(map(int, input().split()))
brr = list(map(int, input().split()))from collections import Countercnt = Counter()bad = Falsefor i in range(0, n * 2, 2):t1, t2 = arr[i], arr[i + 1]tmpCnt = Counter()for j in range(0, m * 2, 2):c1, c2 = brr[j], brr[j + 1]if t1 == c1 and t2 == c2:passelif t1 == c2 and t2 == c1:passelif t1 == c1 and t2 != c2:tmpCnt[t1] += 1elif t1 == c2 and t2 != c1:tmpCnt[t1] += 1elif t1 != c1 and t2 == c2:tmpCnt[t2] += 1elif t1 != c2 and t2 == c1:tmpCnt[t2] += 1if len(tmpCnt) >= 2:bad = Trueelif len(tmpCnt) == 1:cnt[list(tmpCnt.keys())[0]]+=1for i in range(0, m * 2, 2):t1, t2 = brr[i], brr[i + 1]tmpCnt = Counter()for j in range(0, n * 2, 2):c1, c2 = arr[j], arr[j + 1]if t1 == c1 and t2 == c2:passelif t1 == c2 and t2 == c1:passelif t1 == c1 and t2 != c2:tmpCnt[t1] += 1elif t1 == c2 and t2 != c1:tmpCnt[t1] += 1elif t1 != c1 and t2 == c2:tmpCnt[t2] += 1elif t1 != c2 and t2 == c1:tmpCnt[t2] += 1if len(tmpCnt) >= 2:bad = Trueelif len(tmpCnt) == 1:cnt[list(tmpCnt.keys())[0]]+=1if bad:print (-1)
else:if len(cnt) >= 2:print (0)elif len(cnt) == 1:print (list(cnt.keys())[0])else:print (-1)

C. 铺瓷砖

思路: 状压

只能说非常典的状压题

grid = []
for _ in range(2):grid.append(input())n = len(grid[0])dp = [0] * 4# 状压
def f(ch):return ord(ch) - ord('0')dp[f(grid[0][0]) + (f(grid[1][0]) << 1)] = 0for i in range(1, n):dp2 = [0] * 4mask1 = f(grid[0][i - 1]) + (f(grid[1][i - 1]) << 1)mask2 = f(grid[0][i]) + (f(grid[1][i]) << 1)for s1 in range(4):if (mask1 & s1) != mask1:continuefor s2 in range(4):if (mask2 & s2) != mask2:continuep2 = s2 - mask2if (s1 & 1) == 0 and p2 == 3:dp2[s2] = max(dp2[s2], dp[s1] + 1)if (s1 & 2) == 0 and p2 == 3:dp2[s2] = max(dp2[s2], dp[s1] + 1)if s1 == 0 and p2 == 1:dp2[s2] = max(dp2[s2], dp[s1] + 1)if s1 == 0 and p2 == 2:dp2[s2] = max(dp2[s2], dp[s1] + 1)if p2 == 0:dp2[s2] = max(dp2[s2], dp[s1])dp = dp2res = max(dp)
print (res)

写在最后

相关文章:

  • 信息学奥赛一本通1177:奇数单增序列
  • DS:二叉树的顺序结构及堆的实现
  • MATLAB | 情人节画个花瓣venn图?
  • 002 - Hugo, 自动部署博客
  • Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试
  • 关于Build Your Own Botnet的尝试
  • 如何用 ChatGPT 做项目管理?
  • 吴恩达机器学习全课程笔记第一篇
  • 第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性
  • C# CAD SelectionFilter下TypedValue数组
  • N叉树的层序遍历
  • borb,一个好用的 Python 库!
  • Vue 新版 脚手架 初始化 笔记
  • 安卓版本与鸿蒙不再兼容,鸿蒙开发工程师招疯抢
  • 【探索Linux】—— 强大的命令行工具 P.22(POSIX信号量)
  • 【前端学习】-粗谈选择器
  • 30天自制操作系统-2
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Git的一些常用操作
  • Java小白进阶笔记(3)-初级面向对象
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • linux学习笔记
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PHP 的 SAPI 是个什么东西
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 分布式任务队列Celery
  • 后端_MYSQL
  • 经典排序算法及其 Java 实现
  • 码农张的Bug人生 - 初来乍到
  • 如何在 Tornado 中实现 Middleware
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 使用common-codec进行md5加密
  • 使用parted解决大于2T的磁盘分区
  • 走向全栈之MongoDB的使用
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $(function(){})与(function($){....})(jQuery)的区别
  • %check_box% in rails :coditions={:has_many , :through}
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (二)PySpark3:SparkSQL编程
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)UDP基本编程步骤
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net语言中的StringBuilder:入门到精通
  • .NET中winform传递参数至Url并获得返回值或文件
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!