随笔分类 - 动态规划
摘要:分析:看起来有点像最大权闭合图,然而复杂度太高。。。 正解是dp,设dp[i]为考虑前i条路的最大收益,则dp[i]=max{dp[j] - cost[j+1][i] + earn[j+1][i]},0<=j<=i-1,earn[j+1][i]表示在[j+1,i]之间的比赛,是个O(n^2)的dp.
阅读全文
摘要:链接:https://nanti.jisuanke.com/t/17429 题意:给定一个由n个顶点组成的凸多边形,顶点都是整点,求有多少条对角线可以把该多边形分成两部分,满足两部分的面积都是整数。 分析:多边形面积S=1/2 |∑(xi*y(i+1)-x(i+1)*yi)|,只需要判断绝对值里的东
阅读全文
摘要:比赛链接:https://www.jisuanke.com/contest/823 A. 图像压缩四叉树 按题意构造一下树,然后按2,3,0,1的顺序遍历孩子就可以了。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 usi
阅读全文
摘要:题目链接:http://arc077.contest.atcoder.jp/tasks/arc077_c 分析:如果某条线段包含x,显然应该先按一下到x,再从x走,反之必然是直接走过去,很容易想到用dp做,记len[i]为包含i点的线段长度之和,s[i]为以i为起点的线段数目,con[i]为包含i的
阅读全文
摘要:分析:记dp[i][j]为从i到j合并的最小代价(顺时针,i可以大于j),sum[i][j]为从i到j的和,则dp[i][j]=min{dp[i][k-1]+dp[k][j]}+sum[i][j],(i<k<=j),直接求的话复杂度为O(n^3),会T。 四边形不等式优化:记s[i][j]为dp[i
阅读全文
摘要:分析:记数组中最长的连续子串长度为maxlen(数值上连续,位置不一定连续,如2134,最长为3).首先可以证明,n-maxlen次操作可以满足条件,如最长子串最后一个为x<n,则把x+1移到最后,如果是x=n,记子串的第一个为y,把y-1移到最前,每次操作后最长连续子串长度+1,故可以满足条件.接
阅读全文
摘要:分析:记dp[x][s][1]为从第x个数开始,剩余s段可以分,1表示x跟上一段连着,0表示不连着,递推式为dp[x][s][1]=max{dp[x+1][s][1]+a[x],dp[x+1][s][0]},dp[x][s][0]=max{dp[x+1][s-1][1]+a[x],dp[x+1][s
阅读全文
摘要:分析:记dp[n][k]为n个数,逆序数为k的个数,将dp[n][k]分为两部分,一部分有1~n-1的逆序构成,一类是有n的逆序,可以得到dp[n+1][k+1]=(max(0,k+1-n),min(k+1,n*(n-1)/2)∑dp[n][i],再用dp[n+1][k+1]与dp[n+1][k]做
阅读全文

浙公网安备 33010602011771号