摘要:
gate 还是状压dp... 因为int开成bool了de了好久,最后还是wjh帮忙看出来的qaq f[i][k][j]代表第i行,状态为j,上一行状态为k,上上行的状态为kk 四重循环,保证j,k、j,kk、k,kk不冲突的前提下,有: f[i][k][j] = max(f[i][kk][k] + 阅读全文
摘要:
gate 设跳到i最少踩到的石子数为f[i],j ∈ (s,t), c[i]为i是否有石子。 dp方程:f[i] = min(f[i-j]+c[i]) 看起来很简单的样子? 但是这道题的数据范围比较奇怪,桥的距离有1e9,显然数组开不下… 不过石子的个数只有100,而且跳的距离只有1~10。 所以两 阅读全文
摘要:
gate 树形dp水题,题意见题目w 直接判断是否选儿子即可。 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #define MogeKo qwq using namespace std; const in 阅读全文
摘要:
gate 我太菜了,看了标签是背包还不知道是怎么回事qaq 看了下题解,意识到这是个类似素数筛的东西。 感性理解可以发现,原货币系统中能被表示出来的是可以不选的,剩下的就是要选的。所以最小的一定要选,把原货币系统从小到大排序。 枚举原货币系统中的货币a[i],枚举金额j(a[i]+1<j<a[n]) 阅读全文
摘要:
gate 四 重 循 环 暴 力 枚 举 因为最终状态是用完所有的牌…所以可以根据用了多少牌来dp 设f[i][j][k][l]表示每种牌用了多少张…它就可以从f[i-1][j][k][k],f[i][j-1][k][l]...转移过来 代码如下 #include<cstdio> #include< 阅读全文
摘要:
gate 第一反应是树形dp,讨论兄弟和爷爷两种情况。想了想觉得不够优雅就去看了题解… 优雅的做法是枚举中间点! 设当前点为x,x所连的点为(a,b,c,...) 对于求最大值,只要每次记录x连接的最大的两个点,并检查更新答案即可。 因为求有序点对,所以(a,b)(b,a)都会被算一次。 那么x的最 阅读全文
摘要:
gate 经过第二天平复心情后回来写题解… 写bug5分钟 debug2小时 显然,区间dp,开2倍长度+前缀和 f[i][j][t]表示区间(i,j)分成t段所得到的最大值。 区间长度、起点、分段数、断点,四重循环。 注意范围——比如分段数的上限是min(m,j-i+1). *之前的枚举顺序不对但 阅读全文
摘要:
gate 这题想不出怎么dp于是看了眼题解…… 是区间dpQwQ(看来什么前中后序遍历的概念还是有点不熟练) 因为中序遍历,左右儿子一定在根节点的左右。就是把树压扁了...(这个好像是企鹅学长说的qwq?) f[i][j]表示区间i,j所能得到的最大值。最外层循环从小到大枚举长度。 f[i][j] 阅读全文
摘要:
gate 就这个破题dp+高精度...我de了好久/kk 设f[i][j]表示前i个数,用了j个*号,num(l,r)表示从第l位到第r位表示的数字 f[i][j] = max(f[i][j],f[k][j-1]*num(k+1,i)) 不用高精是60pts,代码如下: #include<cstdi 阅读全文
摘要:
今天新写的高精度板子!神清气爽 HAI = High Accuracy Int 阅读全文