随笔分类 - ACM——DP
摘要:题意:给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。 分析:”同一个强连通分量中的点要么都选,要么不选。把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它的结点数,则题目转
阅读全文
摘要:题意:做蛋糕,给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和。 思路:首先离散化蛋糕体积,以蛋糕数量建树建树,每个节点维护最大值,也就是假如节点i放在最上层情况下的体积最大值dp[i]。每次查询比蛋糕i小且最大体积的蛋糕,然后更新线段树。注意此题查询的技巧!!
阅读全文
摘要:题意:给你一个长度为n的括号匹配串(不一定恰好匹配),让你在这个串的前面加p串和后面加上q串,使得这个括号串平衡(平衡的含义是对于任意位置的括号前缀和大于等于0,且最后的前缀和为0)。 思路:枚举这个字符串前面p字符串的长度,我们可以使得p字符串的前缀和大于等于字符串s的最小前缀和minx,那么p+
阅读全文
摘要:思路:dp[i]代表第i个拦截系统最后拦截的高度及最低值。贪心判断接下来那个导弹的高度与离它最近的之前所有拦截系统中的最近,不符合则开一个系统。 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstd
阅读全文
摘要:题意:知道一个人买票花的时间和和前面那个人一起买票花的时间,问最少花多少时间可以把票卖完. 给出T,表示有T组样例 给出n,表示有n个人买票. 给出n个数表示这个人单独买票会花的时间. 给出n-1个数,表示这个人和前面那个人一起买票会花的时间. 思路:dp[i]=min(dp[i-1]+a[i],d
阅读全文
摘要:思路:a[i][j]表示j秒在i位置的数目,dp[i][j]表示j秒在i位置最大可以收到的数目。 转移方程:d[i][j]=max(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1]); 1 #include<iostream> 2 #include<string> 3 #in
阅读全文
摘要:水 给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量 要求出重量最少能装满钱罐时的最大价值 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #i
阅读全文
摘要:题意:其实就是最大递增子段和 思路:状态方程:dp[j]=max{dp[i]}+a[j]; 其中,0<=i<=j,a[i]<a[j] 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5
阅读全文
摘要:题意:有n门课,每门课有截止时间和完成所需的时间,如果超过规定时间完成,每超过一天就会扣1分,问怎样安排做作业的顺序才能使得所扣的分最小 思路:二进制表示。 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #includ
阅读全文
摘要:求最长单调递减序列。 1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #inc
阅读全文
摘要:kuangbin 专题这题,有很多种解法。第一种:直接比较每个数出现次数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 ...
阅读全文
摘要:题意:本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题。kuangbin专题。dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0 2 #include 3 #include 4 #include 5 #includ...
阅读全文
摘要:题意:有n个结点,n-1条边,现在要把这n个结点连成一棵树,给定了f(i),表示度为i的结点的价值是f(i)。现在问如何连能够使得Σf(i)的值最大。思路:每个点至少一个度,所以可分配的度数为n-2,那么剩下就是每种物品可以任意选,转化成背包问题。 1 #include 2 #include 3...
阅读全文
摘要:题意:给出一个表达式的子序列,要你填充这个序列,保证最终形成的序列长度最短,也就是添加的括号最少这个子序列要遵循括号匹配的原则。分析:转移方程dp[i][j]=min(dp[i][k],dp[k+1][j]).i 2 #include 3 #include 4 #include 5 #include...
阅读全文

浙公网安备 33010602011771号