随笔分类 - ACM_DP
摘要:听说3^n也能水过去。。 其实应该是个经典题,求图染色这个np问题。 把问题拆成独立集来进行dp可以在3^n之内水过去。 拆成独立集的时候就发现,等价与一个经典的反演dp问题 然后复杂度就变成了 n*n*2^n 另外,偷到一套头文件宏定义。
阅读全文
摘要:咋一看,至少要用3^n才能做到。 但。 首先定义: 可以发现只要求出a' b' 那么直接可以得出c' 那么如何求a'呢 有了a'之后,观察式子发现直接逆着写,就可以从a'->a 然后反演即为: 然后就可以在n*2^n 内求出C 参考:炫酷反演魔术
阅读全文
摘要:肛道理,斜率优化就是一种数形结合的思想啦。 把dp方程写出来,然后维护凸包即可。 hdu 3507 Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total
阅读全文
摘要:注意:这题题意是有操作的天数相隔要大于w 然后列出状态转移方程就可以发现,可以用优点队列优化啦。 构造状态dp[i][j]表示第i 天拥有 j只股票的时候,赚了多少钱 状态转移有: 1、从前一天不买不卖: dp[i][j]=max(dp[i-1][j],dp[i][j]) 2、从前i-W-1天买进一
阅读全文
摘要:基础的数位dp,才发现今天才终于彻底搞懂了数位dp。。。
阅读全文
摘要:应该是一个入门级别的题目。 但是有几个坑点。 1. 只选择x能到达的点作为guass中的未知数。 2. m可能大于n,所以在构建方程组时未知数的系数不能直接等于,要+= 3.题意貌似说的有问题,D为-1的时候,和题目说的不一样.
阅读全文
摘要:题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离。 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 第一种,树形dp+LCA 比赛的时候,我猜测对于不为1的n个数,其中两两互质的对数不会很多,肯定达不到n^2 然后找出所有互
阅读全文
摘要:要进行两次dp, 第一个,dp[i],1<=i<=(1<<n) 其中用i的二进制形式表示已选择的点。 dp[i] 用来保存i中的点构成一个连通块,边集多少种可能。 转移方程: 第二次dp,套路基本相同。 dp[i][j] 表示恰有(i+1)个连通块,且含j中的点的所有可能。 转移方程: // //
阅读全文
摘要:相当于用多个O(nlog(n))LIS来做。
阅读全文
摘要:坑爹的题目。不过不能说不是一道挺好的题目。 坑主要坑在,妹的我一样的复杂度,写的姿势略差了点然后就一直超时。 比赛的时候我还直接就看错题目,把AND运算看成了OR。。。还敲完交了一发。 这题很容易想到: 因为给出的数字只有13位,所以每位用2位二进制表示。 如: 00 1的个数为偶数,最后的结果为0
阅读全文
摘要:目前做过的最纠结的一道递推题。 情况比较多,比较复杂。。。 这题最主要的还是要推出当m=2 时和m>2时,用什么方法最优。 给个数据 n=3,m=2 需要48 n=3,m=3 需要81 如果在纸上把这两种情况推出来,这题就容易找到递推。 m=1,就是最基础的汉诺塔递推了。 Time Limit: 2
阅读全文
摘要:题意无比诡异。 http://acm.timus.ru/problem.aspx?space=1&num=1716 俄罗斯的英文简直把我吓尿。 题意是对于输入:X1X2X3X4(Xi为YES或NO) 装变为 Y X1X2X3 然后问xi对应的错误的期望个数。 每种情况都是等概率的。 然后用dp做 d
阅读全文
摘要:题目的意思是对于序列1,2,...,n。要你给出一种字典序最小的置换使得经过X次后变成最初状态,且要求最小的X最大。通过理解置换的性质,问题可以等价于求x1,x2,..,xn 使得x1+x2+...+xk=n,且GLM(x1,x2,...,xn)最大。这个就用dp来做,首先求出100内的所有素数记录...
阅读全文
摘要:不错的一道dp题目,一开始想了一种N*N的dp,后面就一直想怎么优化,然后就一直都在坑中了。这题题解还是看早了,应该再多想会的,多换种表示状态的方法再想想。dp[i][j]=dp[i-j][j]+dp[i-j][j-1] 表示已经用了i并且最后一位为j的所有情况。dp[0][0]=1 其中i#inc...
阅读全文
摘要:这题根据的Dilworth定理,链的最小个数=反链的最大长度 , 然后就是排序LIS了链-反链-Dilworth定理hdu1051#include #include #include #include #include #include #include #include using namespa...
阅读全文
摘要:经典的一道DP题。题目明显是一道DP题,但是比赛的时候一个劲就在想怎么记录状态和转移。最后想到了一种n^3的方法,写了下,不出所料的超时了。看了别人的代码才发现竟然是先二分然后再进行DP,像这种思路应该会经常用啊。。。二分距离,DP判断是否可行。 然后这题的DP也是非常经典的,想了好久都想不通,最后站在最优解的情况下思考,才想通。状态转移方程:for(int i=1;i<=n;i++) { dp[i]=1; for(int j=1;j<i;j++) if(mabs(g[j]-g[i])<=(i-j)*s) d...
阅读全文
摘要:比较巧妙的一道题目,拿到题目就想用暴力直接搜索,仔细分析了下发现复杂度达到了2^n*n! ,明显不行,于是只好往背包上想。 于是又想二分找次数判断可行的方法,但是发现复杂度10^8还是很悬。。。然后学习了这种背包状压的好思路, 巧妙的转化成了背包的模型。 一道经典的题目!RelocationTime Limit:1000MSMemory Limit:65536KTotal Submissions:1664Accepted:678DescriptionEmma and Eric are moving to their new house they bought after returning f
阅读全文
摘要:http://wenku.baidu.com/view/728cd5126edb6f1aff001fbb.html关于悬线法,这里面有详解。我当时只想到了记录最大长度,却没有想到如果连最左边和最右边的位置都记录的话这题就可以解决了。 学习了一种新算法很开心。Cut the cakeTime Limit: 6000/3000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 881Accepted Submission(s): 328Problem DescriptionMark bough
阅读全文
摘要:总是不能正确的将一个大问题变成子问题,而且又找不到状态转移方程。 直接导致这题想了5个小时最后还是无果。。。谨记!Number StringTime Limit: 10000/5000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1136Accepted Submission(s): 503Problem DescriptionThe signature of a permutation is a string that is computed as follows: for eac
阅读全文
摘要:dp还是比较好想的,但是时间还是比较坑的。 要预处理还加些优化才行 。#include #include #include #include #include #include #include #include #include using namespace std;#define INF 0x3fffffff#define MOD 1000000007int n,m,k;int dp[101][1010][35];int save[1010][1010];int g[35];int cnt=0;int mark[1100];//bool mark1[1100][1100];int gcd
阅读全文