摘要:
hihoCoder 1636 Pangu and Stones 思路:区间dp. 状态:dp[i][j][k]表示i到j区间合并成k堆石子所需的最小花费。 初始状态:dp[i][j][j-i+1]=0 状态转移: 如果k等于1,dp[i][j][1]=min(dp[i][j][1],dp[i][k] 阅读全文
摘要:
1.石子归并问题 dp[i][j]表示区间i到j合并所需的最小花费。 先求出小区间的最小花费,再转移到大的区间。 转移方程:dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]) 初始状态:dp[i][i]=0 模板: 2.括号匹配问题 求最大括号匹配数 dp[i][j 阅读全文
摘要:
概述:用倍增法求区间最值的离线算法,O(nlogn)预处理,O(1)访问。 预处理: 状态:st[i][j]:[i,i+2^j)之间的最值 状态转移:如果j等于0,st[i][j]=a[i] 如果j大于0,st[i][j]=max(st[i][j-1],st[i+2^(j-1)][j-1])或st[ 阅读全文
摘要:
916C - Jamie and Interesting Graph 思路:构造。 对于1到n最短路且素数,那么1到n之间连2 对于最小生成树,找一个稍微大点的素数(比1e5大)构造一个和为这个素数的最小生成树 剩下的边都连1e9 代码: 阅读全文
摘要:
思路: 先取出二进制的每一位,判断总个数是不是小于等于k,如果大于k则不能构成。 通过观察可以发现,每一位的一个可以转换成下一位的两个,因为要使最大位尽可能小,所以如果最大位的所有的个数都可以转换成下一位那么就全部转换过去,如果不能就一个也不要转换,不然会导致字典序损失。 然后从最小的位开始转换,每 阅读全文