
紫书
流锡
不想当菜狗捏
展开
-
UVA1252 Twenty Questions (状压dp)
题目大意: 给你两个数n,m 再给你n个物品的特征值用长度为m的二进制数字表示 随机选一个物品让你来猜 问你最少猜多少次能猜中 思路: 状压dp 设s表示已经猜过的物品的特征值 a表示s中目标物品包含的特征值 用d[s][a]表示状态 之后猜的时候分成两部分 枚举二进制的每位数字 一部分是不包含这个特征值的情况,一个部分是包含这个特征值的情况 然后因为要最少猜多少次才能猜中嘛 这里两个数字要取最大值,然后枚举的时候取最小值 还有猜到只剩1个时候就说明猜完了 只剩两个的时候再猜一次就好了 具体看代码 AC代码原创 2021-08-19 23:57:39 · 134 阅读 · 0 评论 -
UVA10817 Headmaster‘s Headache
题目大意: 有m个老师与n个求职者还有s个科目 老师必须选,求职者可选可不选 要求这s个科目都要有至少两个人教 问你最少花费是多少 思路: 状压dp 我们可以设s1用二进制表示目前恰好有一个人教的科目 s2表示有两个人教的科目 s0表示目前没有人教的科目 面对老师的时候把他的花费跟他教的科目都放进来 而求职者的时候就有两种状态了 直接跳到下一个人不选或者选他加入他的花费 主要还是二进制方面表示状态的东西可能比较难想 具体看代码 #include <bits/stdc++.h> using na原创 2021-08-18 11:18:59 · 117 阅读 · 0 评论 -
UVA 1218 Perfect Service(树形dp)
题目大意: 有n个点 要求在一些点安装服务器,使不是服务器的点恰好与一台服务器计算机相邻 最少要装多少个点 思路: 树形dp d[u][0]表示u是服务器,子节点是服务器或者不是服务器的状态 d[u][1]表示u不是服务器,u的父亲是服务器,u的子节点都不是服务器的状态 (如果有一个子节点是服务器那u久相邻两台服务器了) d[u][2]表示u和u的父亲不是服务器,u的一个子节点是服务器的状态 然后就写状态转移方程(v是u的子节点) d[u][0]=sum(min(d[v][1],d[v][2])+1 d[u原创 2021-08-14 23:48:56 · 138 阅读 · 0 评论 -
UVA1347 Tour
题目大意: 给你n个坐标 按x递增顺序给出坐标 让一个人按严格x递增顺序走到最后一个点 之后再从最后一个点严格向左走回来 要求走的时候除了起点终点经过两次以外其他点全部都经过一次 问最短路径 思路:dp 这里紫书的第一个图是有问题的 题目要求人向右走的时候x要严格增加,向左走的时候严格变小 不能经过一个超过1个点坐标的时候又反过来走 不然如果可以这题是无解的 思路就是两个人从起点出发走两条没有相同点的路径最终走到终点 设dp[i][j]表示第1个人走到第i点,第二个人走到第j点还需要多少距离到终点 因为dp原创 2021-08-10 17:09:06 · 94 阅读 · 0 评论