摘要:
题目给个n×m的地图,1可以放玉米0不可以,现在要放玉米,玉米上下左右不能相邻,问放法有几种。 当前一行的决策只会影响下一行,所以状压DP之: dp[i][S]表示前i行放完且第i行放玉米的列的集合是S的方案数 先预处理出每一行合法的放法的集合,合法的放法其实是很少的,通过枚举合法的集合来转移。 1 阅读全文
摘要:
题目是平面上n个点,要用若干个矩形盖住它们,每个矩形上至少要包含2个点,问要用的矩形的面积和最少是多少。 容易反证得出每个矩形上四个角必定至少覆盖了两个点。然后就状压DP: dp[S]表示覆盖的点集为S要用的最少矩形面积 转移我一开始是未覆盖的点和已覆盖的点构成一个矩形来转移,这是错的,因为这样子的 阅读全文
摘要:
题目给几个字符串,可以给它们添加前导空格,然后排列,计算每一个字符串和前一个字符串相同非空格字符相等的个数,求可能的最大个数。 状态DP: d[S][i][j]表示已经用的字符串集合S且排列的最后一个是前面带j个空格的字符串i 转移就枚举从什么字符串几个前导0结尾转移过来的。还可以预处理一下各个情况 阅读全文
摘要:
题目是,有n头牛,每头牛都喜爱某几个草地,要把这n头牛分配给m个不同的它们喜爱的草地,问有几种分配方式。 dp[n][S]表示前n头牛分配完毕后占用的草地集合是S的方案数 dp[0][0]=1 dp[n][S]+=dp[n-1][S-x](x∈S且n喜爱x) 不过的状态这样空间开销太大了,事实上n这 阅读全文
摘要:
题目给一张n×n的格子,每个格子都有数字,要从格子中取若干个数字,八个方向相邻的数字不能一起取,问取的数字最大和是多少。 从第一行一行一行看下去,可以发现第1行取哪几列只会影响到第2行,第3行后面的一点影响都没有。即第i行的决策只受i-1行决策的影响。 那么自然想到状态DP—— dp[i][S]前i 阅读全文
摘要:
题目是有n个存有宝藏的城堡,攻克任何一个城堡都需要先攻克0个或其他1个城堡,问攻克m个城堡最多能得到多少宝藏。 题目给的城堡形成一个森林,添加一个超级根把森林连在一起就是树了,那么就考虑用树型DP: dp[u][m]表示以u结点为根的子树攻克m个结点的最大价值 但是这样转移太难了,根是从每个孩子通过 阅读全文
摘要:
题目求一棵树的最小支配数。 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻。 听说即使是二分图,最小支配集的求解也是还没多项式算法的。而树上求最小支配集树型DP就OK了。 树上的每个结点作为其子树的根可以有三个状态: 不属于支配集且还没被支配 不属于支配集但被其孩子支配 阅读全文
摘要:
题目给一张有向图,问从起点1到终点2沿着合法的路走有种走法,合法的路指从u到v的路,v到终点的距离严格小于u到终点的距离。 先SPFA预处理出所有合法的路,然后这些路肯定形成一个DAG,然后DP一下就OK了,d[u]表示u到终点2的方案数。 1 #include<cstdio> 2 #include 阅读全文
摘要:
题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点。 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了。 那么问题就简单了,强连通分量缩点,强连通分量必定要一起留下,从入度0到出度0的强连通分量找到一条包含最多点的通路即可。 阅读全文
摘要:
题目给张R×C的地图,地图上*表示泥地、.表示草地,问最少要几块宽1长任意木板才能盖住所有泥地,木板可以重合但不能盖住草地。 把所有行和列连续的泥地(可以放一块木板铺满的)看作点且行和列连续泥地分别作为XY部,每一块泥地看作边。这样就构造出了一个二分图。 那么,问题就是在这个二分图中就是选出最少的点 阅读全文
摘要:
给两个长n的01串s1和s2,要对s1进行k次修改,每次修改m个不同位置,问有几种方式修改成s2。 想偏了,只想到原始的01数值是不重要的,因为每个位置修改次数的奇偶性是确定的这一层。。 其实,这题只要关心从起点到终点有几个位置是不同的,一个数值足矣。 然后具体的状态就是:dp[i][j]表示,进行 阅读全文
摘要:
题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通。 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组。 能在同一组的就是两个强连通分量在不同的从入度0到出度0的强连通分量的路径上。 那么算法很直观就能想到了,用记忆 阅读全文
摘要:
题目大概问小于等于m个的物品放到n个地方有几种方法。 即解这个n元一次方程的非负整数解的个数$x_1+x_2+x_3+\dots+x_n=y$,其中0<=y<=m。 这个方程的非负整数解个数是个经典问题,可以+1转化正整数解的个数用插板法解决:$C_{y+n-1}^{n-1}=C_{y+n-1}^y 阅读全文
摘要:
题目问[1,n]中与n的gcd大于等于m的数的个数。 好难想。。。 假设x满足条件,那么gcd(x,n)=d>=m,而x/d与n/d一定互质。 又x<=n,所以x/d<=n/d。 于是gcd(x,n)=d的x个数就等于小于n/d且与n/d互质的个数,即phi(n/d)。 不同的d对应的x肯定会不重复 阅读全文
摘要:
与HDU2841大同小异。 设左下角的点为(1,1),如果(1,1)->(x,y)和(1,1)->(x',y')向量平行,那只有在前面的能被看见。然后就是求x-1、y-1不互质的数对个数。 而x或y等于1可以另外讨论一下,就是当n不等于1时就有两个,n等于1就特判一下。 那么就用欧拉函数计数了:枚举 阅读全文