先贴一下转载的思路和代码,,,:http://blog.csdn.net/qian99/article/details/39138329 状压dp博大精深啊,以后看到n<=50都可以往状压上想,orz We Need Medicine Time Limit: 10 Seconds                                     Memory Limit: 65536 KB                                                   …
/** 题目:hdu6149 Valley Numer II 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6149 题意: 众所周知,度度熊非常喜欢图. 为了形成山谷,首先要将一个图的顶点标记为高点或者低点. 标记完成后如果一个顶点三元组<X, Y, Z>中, X和Y之间有边,Y与Z之间也有边,同时X和Z是高点,Y是低点,那么它们就构成一个valley. 度度熊想知道一个无向图中最多可以构成多少个valley,一个顶点最多只能出现在一个valley…
/** 题目:hdu6125 Free from square 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6125 题意: 从不大于n的所有正整数中选出至少1个且至多k个使得乘积不包含平方因子,对10^9+7取模. 1≤n,k≤500. 思路: 分组背包+状态压缩 把n个数分成若干组,互斥的放在同一组. 一开始把所有含平方因子的数去除掉,剩下的进行分组. <sqrt(500)的八个素因子,编成八组,分别为包含2,3,5,7,11,13,17,19素…
[BZOJ 4455] [ZJOI 2016] 小星星 (树形dp+容斥原理+状态压缩) 题面 给出一棵树和一个图,点数均为n,问有多少种方法把树的节点标号,使得对于树上的任意两个节点u,v,若树上u,v之间有一条边,图上u,v对应的点之间也有一条边. \(n \leq 17\) 分析 看到\(n \leq 17\),我们应该想到状态压缩.但直接用子集dp的时间复杂度为\(O(3^nn^3)\),会TLE.所以我们压缩的状态可能有问题,考虑优化. 显然题目给了两个限制: 原树中的每条边都要在图中…
题目链接: https://vjudge.net/problem/POJ-2923 题目大意: 有n个货物,给出每个货物的重量,每次用容量为c1,c2的火车运输,问最少需要运送多少次可以将货物运完 思路: 第一次做状态压缩(状态压缩基础知识传送门) 本题的解题思路是先枚举选择若干个时的状态,总状态量为1<<n,判断这些状态集合里的那些物品能否一次就运走,如果能运走,那就把这个状态看成一个物品.预处理完能从枚举中找到tot个物品,再用这tol个物品中没有交集(也就是两个状态不能同时含有一个物品)…
D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output Roman is a young mathematician, very famous in Uzhland. Unfortunately, Sereja doesn't think so. To make Sereja change h…
嗯,作为一只蒟蒻,今天再次学习了状压dp(学习借鉴的博客) 但是,依旧懵逼·································· 这篇学习笔记是我个人对于状压dp的理解,如果有什么不对的地方,希望大家指出. 闲话不多说,进入正题. 首先,在介绍状压dp之前,我们先来了解一下状态压缩(常用的为二进制,why?[因为其他的我不会]). 什么是状态压缩呢?顾名思义,就是将数转换为二进制来进行一些操作. 基本操作: 看完基本操作,我们来看一下一些稍微复杂的操作. 操作 运算 取出整数n在二…
题意:给定一个区间,让你求在这个区间里的满足LIS为 k 的数的数量. 析:数位DP,dp[i][j][k] 由于 k 最多是10,所以考虑是用状态压缩,表示 前 i 位,长度为 j,状态为 k的数量有多少,再结合nlogn的LIS, 就能搞定这个题目了. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #inclu…
首先要明确:状态压缩是利用数字来代表一组序列的方法,从而降低序列访问的复杂度,本质上跟HASH有着差不多的思想,但是其实就是数位运算的一种 定义:集合中共有N个数字,其中每个数字均小于K,能么我们可以用N位K进制数来表示整个集合,能么该数字转化为十进制数字(也就是int or long long),整个状态的表示就变成了一个数字 状态的表示i实际上就是利用数字来扩充代表的范围 最典型的一道例题: USACO 06 corn fields 题目中给定一个N*M的矩阵,其中1代表可操作,0代表不可操…
参考:http://blog.csdn.net/qian99/article/details/39138329 参考的链接里说明得很好,注释也很好...thanks for sharing 朴素的想法不难,dp[i][j][k]类似背包做法即可. 但朴素思想复杂度过高. 这里主要是用到 dif 那个变量,只枚举新增的集合. #include <cstdio> #include <cstring> #include <iostream> #include <algo…
题目链接 Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping them relocate. To move the furniture, they only have two compact cars, which complicates everything a bit.…
题意:有人要搬家,有两辆车可以运送,有若干家具,车有容量限制,而家具也有体积,那么如何运送会使得运送车次最少?规定两车必须一起走,两车一次来回只算1躺. 思路:家具怎么挑的问题,每趟车有两种可能:1带走此家具:2此趟暂时不带走.那就是01背包了.但是限制是两只车的容量.求的是趟数. 1)数据量较小,将这10件以内的所有物品的可能组合记录一下,有2^10种,其中是包含了一些运不走的组合,滤掉,只留下可能的组合.对每种可能的新组合进行01背包,即考虑对于新组合i这种运送方案该不该取,如果取了能使车次…
#define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefully reading the entire description is very important. As the strongest fighting force in UESTC, xhxj grew up in Jintang, a border town of Chengdu. Like many god cattles, xh…
题目链接:[kuangbin带你飞]专题十五 数位DP B - XHXJ's LIS 题意 给定区间.求出有多少个数满足最长上升子序列(将数看作字符串)的长度为k. 思路 一个数的上升子序列最大长度为10,所以每个上升子序列的状态都能够用10个二进制位来表示. 上升子序列的变化能够用LIS的方式来更新. dp[len][num][k] len为当前的位,num为当前上升子序列的状态.k表示子序列的长度. next[s][num]为记录预处理的子序列的状态变化. cnt [num]记录各个状态的最…
简单题. 我第二道自己做出来的 2900 没毛病,我没切过 2800 的题 lqy:"CF 评分 2800 是中等难度" 我活个啥劲啊 为了方便(同时压缩状态个数),先建出表达式树,然后一棵子树就代表一个完整的表达式(要么是单个变量,要么是被一堆匹配的括号恰好包住的). 注意:(在我的写法里面)叶子都是变量,非叶子都是运算符,每个非叶子有恰好两个儿子,就表示这个运算符把整个表达式分成了哪两个, 然后就开始 DP 了. 明显状压吧?首先四个变量的取值可以压成一个四位二进制数(\(0\)…
Hamburger Magi Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 509    Accepted Submission(s): 163 Problem Description In the mysterious forest, there is a group of Magi. Most of them like to eat…
UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集 ACM 题目地址:option=com_onlinejudge&Itemid=8&page=show_problem&problem=2925" style="color:rgb(0,136,204); text-decoration:none">11825 - Hackers' Crackdown 题意:  有一个由编号0~n-1的n台计算机组成的网络,一共…
http://acm.whu.edu.cn/land/problem/detail?problem_id=1546 这个题目还是聪哥教的方法过的 首先搜索是必须的,而且通过搜索来缩点,这些应该要想到,即把图上的起点和终点还有能量点进行标记,之后用bfs找到这些个点的最短路,最多只有12个点,这样对12个点进行状态压缩DP,状态压缩这部分不是很好写 用dp[i][j]表示在状态i的情况下,此刻在j点落脚的最大能量数,则先枚举i再枚举j,再枚举k,k代表已经存在于i里面的点 每次从dp[i][k]过…
BZOJ 1076 [SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃). 宝物一共有$n$种,系统每次抛出这$n$种宝物的概率都相同且相互独立.也就是说,即使前$k-1$次系统都抛出宝物$1$(这种情况是有可能出现的,尽管概率非常小),第k次抛出各个宝物的概率依然均为$\frac 1 n$. 获取第i种…
题目大意 Vjudge链接 定义一个数的内部LIS长度表示这个数每个数位构成的序列的LIS长度,给出区间\([l,r]\),求区间内内部LIS长度为\(k\)的数的个数. 输入格式 第一行给出数据组数\(T\). 每组数据给出三个数,分别为\(l.r.k\). 数据范围 \(0<L\le R<2^{63},1\le K\le 10\) 输出格式 对于每组数据\(t\),输出Case #t:ans. \(ans\)表示本组数据符合条件数的个数. 样例输入 1 123 321 2 样例输出 Cas…
Problem Description Rompire is a robot kingdom and a lot of robots live there peacefully. But one day, the king of Rompire was captured by human beings. His thinking circuit was changed by human and thus became a tyrant. All those who are against him…
一.写在前面 其实这是一道大水题,而且还出在了数据最水的OJ上,所以实际上这题并没有什么难度.博主写这篇blog主要是想写下一个想法--状态压缩.状态压缩在记录.修改状态以及判重去重等方面有着极高的(←_←词穷了,诸位大致理解一下就好)效率.博主原本打算在blog介绍一种DP--状态压缩型动态规划,但动笔(键盘??)前,博主突然想起自己前些年写过的一道广搜题,当时在判重方面冥思苦想想出了一种类似状态压缩的方法,开心了好久,于是在此先抛砖引玉为状压DP做个铺垫. 二.题目 Description…
最近题目都有状态压缩,我是蒟蒻,并不会状态压缩 然后我决定学了! 然后发现我学不来. OI-WIKI上的界面给我推荐了这道题https://oi-wiki.org/dp/state/ 状态压缩入门题,可惜我不会 下面是OIWIKI的代码 #include<bits/stdc++.h> using namespace std; int read(){//读入优化 ,w=;; ;ch=getchar();} )+(x<<)+ch-',ch=getchar(); return x*w;…
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1563 题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法 Sample Input 3 3 3 10 0 0 Sample Output 2 28 分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:http://www.cnblogs.com/acm-bingzi/p/3289994.html 但是不能照搬这道题…
Q: 如何判断几件物品能否被 2 辆车一次拉走? A: DP 问题. 先 dp 求解第一辆车能够装下的最大的重量, 然后计算剩下的重量之和是否小于第二辆车的 capacity, 若小于, 这 OK. Description Emma and Eric are moving to their new house they bought after returning from their honeymoon. Fortunately, they have a few friends helping…
题意 给定平面直角坐标系内的N(N <= 20)个点,每四个点构成一个正方形可以消去,问最多可以消去几个点. 思路 比赛的时候暴力dfs+O(n^4)枚举写过了--无意间看到有题解用状压DP(这才是正解吧T_T),然后自己才恍然大悟- --- 点不多嘛,用一个20位的整数表示各个点.先O(n^4)枚举出所有正方形情况,然后把这20位当背包,每种情况的二进制位当物品,做01背包就可以了. 似乎遇到N = 10+.20+的都应该想想状态压缩>.<-- 代码 [cpp] #include &l…
题目描述 Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) is running through the farm. Farmer John would like to milk as many of his N (1 <= N <= 1,000) cows as possible. If the milked cows carry more than K (1 <= K <= D) different d…
Free from square Problem Description There is a set including all positive integers that are not more then n. HazelFan wants to choose some integers from this set, satisfying: 1. The number of integers chosen is at least 1 and at most k. 2. The produ…
题意: 有n种化学物质,他们彼此反应会有一种消失并释放出能量. 给出矩阵,第i行j列代表i和j反应j消失释放的能量. 求最大释放多少能量. 思路: 状态压缩DP,我是这么想的. 利用二进制0代表该物质还存在,1代表不存在. 那么一共有2^(n)种状态,每个状态都视为从上一个状态发生一次反应少了一种物质.枚举可能少的物质. 这题被自己坑了,其实不是2^(n)种状态,因为无论如何都会剩一种物质,并不是所有的物质都会消失.所以状态的总数是2^(n)-1种,然后从所有的剩一种物质的状态中寻找max.就是…
转载: http://happyboy200032.blog.163.com/blog/static/46903113201291252033712/ 头文件:#include <bits/stdc++.h>  std::bitset是STL的一部分,准确地说,std::bitset是一个模板类,它的模板参数不是类型,而整形的数值(这一特性是ISO C++2003的新特性),有了它我们可以像使用数组一样使用位.下面看一个例子: #include<bitset> std::bitse…