随笔分类 - 动态规划
摘要:思路: 参照blog,用状压DP做,和题解稍微有点不一样,我这里直接储存了状态而不是索引。 这一题的问题是怎么判断相邻不能种,我们用2进制来表示每一行的种植情况。我们将每一行所能够造的所有可能都打表(即认为每一块都能种),然后将每一行不能种的地方用2进制保存下来,两者&运算聚能知道是否有重合,重合即
阅读全文
摘要:思路: 每个槽有4种深度,一共有2^4种状态。然后开4维来保存每一次的状态:dp[ 第几个槽 ][ 当前状态 ][ 末尾深度 ][ 是否符合要求 ]。 代码:
阅读全文
摘要:思路: 把0~9的状态用3进制表示,数据量3^10 代码:
阅读全文
摘要:题意:美丽数定义:一个正数能被所有位数整除。求给出一个范围,回答这个范围内的美丽数。 思路:一个数能被所有位数整除,换句话说就是一个数能整除所有位数的LCM,所以问题就转化为一个数能否被所有位数的LCM整除。按照一般的思想,直接开三维dp[pos][num][lcm]。但是num范围很大,直接开就爆
阅读全文
摘要:思路: 之前想直接开左右两边的数结果爆内存... 枚举每次pivot的位置,然后数位DP,如果sum<0返回0,因为已经小于零说明已经到了pivot右边,继续dfs只会越来越小,且dp数组会炸 注意一下一些细节:dp开long long,注意前导零只能算一次 代码:
阅读全文
摘要:思路: 设dp[i]为覆盖i所用的最小数量,那么dp[i] = min(dp[k] + 1),其中i - 2b <= k <= i -2a,所以可以手动开一个单调递增的队列,队首元素就是k。 初始状态为dp[0] = 0,注意喷水覆盖的范围是偶数且不重叠,所以插入队列的必是偶数。有牛的地方不能作为边
阅读全文
摘要:思路: 只要把status那里写清楚就没什么难度T^T,当然还要考虑前导零! 代码:
阅读全文
摘要:思路: 这里的状态分为3种,无13和末尾的1,无13且末尾为1,有13,然后DFS 等我搞清楚数位DP就来更新Orz 代码:
阅读全文
摘要:思路: dp[pos][pre]代表长度为pos的不大于pre的个数
阅读全文
摘要:思路: 详解 数位DP入门题dp[pos][sta],pos代表当前位数是第几位,sta代表当前状态,因为题目中只要不出现64,所以当前状态只分为两种:前一位是6或不是。
阅读全文
摘要:思路: 直接DP也能做,这里用斜率DP。 dp[i] = min{ dp[j] + ( sum[i] - sum[j] + 10 )*pr[i]} ; k<j<i => dp[j] - dp[k] <pr[i]*( sum[j] - sum[k] ) 再套模板
阅读全文
摘要:思路:大白里Trie的例题,开篇就是一句很容易推出....orz这里需要Trie+DP解决。仔细想想我们可以得到dp[i]=sum(dp[i+len[x]])。这里需要解释一下:dp是从最后一个字母往前dp,dp[i]代表从i这个字符开始到最后一个字符的这个字符串(就...
阅读全文
摘要:Tri TilingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4343 Accepted Sub...
阅读全文
摘要:命运Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 21193 Accepted Submission...
阅读全文

浙公网安备 33010602011771号