题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1327 因为一列填1个或0个(或0个!!!),而一行不知填多少个,所以按列dp. 发现 l 和 r 的限制略有不同.大约是 l 如果先不填的话,在列向右移动的过程中可能就不能填了:而 r 一旦遇到,之后想什么时候填都可以. 所以可以记录空下了几列,遇到 l 的右边界时再处理该行,即从之前空下的列中选一个给该行:如果一下有多个 l 的右边界,乘上一个排列即可. 对于…
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1327 看博客:https://www.cnblogs.com/Narh/p/9791875.html 思路就是按列DP,如果不是必须填就先空下这一列,记录一下目前有多少可用的空列,遇到一个 l 的结束时就从中选一些列放上棋子,并乘个排列: 对于 r,方案数在当前列体现,所以要记录当前列可填的位置: 注意别漏了状态,当前可转移的状态是填 l,填 r,不填,填在不是…
\(\\\) \(Description\) 给出一张\(N\times M\)的棋盘,每个格子最多放置一个棋子,一个合法的放置方案需满足: 每列至多放置一个棋子 对于第\(i\)行,前\(L_i\)个格子中恰好只放一个,后\(R_i\)个格子中恰好只放一个 求合法方案数对\(10^9+7\)取模后的值. \(N\in [1,50]\),\(M\in [2,200]\),\(L_i,R_i\in [1,M]\),\(L_i+R_i\le M\) \(\\\) \(Solution\) 打死都想不…
51nod 1293 球与切换器 | DP 题面 有N行M列的正方形盒子.每个盒子有三种状态0, -1, +1.球从盒子上边或左边进入盒子,从下边或右边离开盒子.规则: 如果盒子的模式是-1,则进入它的球从下面出去.(方向变为向下) 如果盒子的模式是+1,则进入它的球从右面出去. (反向变为向右) 如果盒子的模式是0, 则进入它的球方向不变.从上面进入的,从下面出去,从左面进入的,从右面出去. 球离开一个盒子,这个盒子的模式切换为相反数.已知,每个盒子的状态,扔k个球,它们都从左上角那个盒子的上…
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1450 期望DP: INF 表示这种情况不行,转移时把不行的概率也转移到自身即可: 还要按得星概率排个序,先决策概率大的就是最优策略,因为后面的都基于它. 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using n…
题目链接:51nod 1412 AVL树的种类 开始做的时候把深度开得过小了结果一直WA,是我天真了.. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; typedef long long ll; ; ; ll dp[N][];//dp[i][k] i:节点数, k:深度 void solve(){ int i, j, k;…
题目链接:51nod 1051 最大子矩阵和 实质是把最大子段和扩展到二维.读题注意m,n... #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #define CLR(a,b) memset((a),(b),sizeof((a))) using namespace std; ; int dp[N][N]; int main(){ int n, m, i, j,…
题意:给出N个人,现在让你分P组,每组的工作效率是最小结束时间-最大开始时间,要求每一组的效率的正数,求最大效率和.N<1000 思路: 把包含至少一个其他的分到A组:否则到B组. A组的要么单独分到一组,要么和它包含的某一个在一组(可以反证,假设已经分好组了,现在把不是单独分组的A加进去,如果分到不是包含关系的里面去,只会把答案变小). 分组可以用栈进行. 而不是N^2枚举,因为多个相同的时候我们可以要保留一个作为最小的一个分到B组. 然后,现在A里面的没有包含关系了,我们可以排序,排序后一定…
题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val(i,j)\)为\(i\)到\(j\)两两之间产生的代价和,容易发现就是一个矩形,可以预处理前缀和\(O(1)\)计算 那么有 \[f[k][i] = min\{f[k - 1][j] + val(j + 1,i)\}\] 直接转移显然\(O(n^2k)\) 我们把\(val(j + 1,i)\)拆…
题意: 有n个玩具,要将它们分为若干组,玩具长度C可能不同.给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组.区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i<=k<=j.给定n和L和每个玩具的长度,问分组后费用总和是多少? (n<=5*104). 思路: 转移方程:dp[i]=min( dp[j]+(sum[i]-sum[j]+i-j+1-L)2  ).sum[i]表示前i件玩具长度的总和,0<j<i,(i-j+1)表示与i同组的玩具…