摘要:
这道题明显的树形DP,但是我有一个邪恶的想法,让他变成多叉树,而且不用返回可以幻影移形,但是得走回来才能去另一条走廊。这看起来很恶毒,我也不知道怎么做。 做法大家都解释的差不多了,这里我主要说一下毒瘤的读入 这道题的读入与这篇博客所讲的题目的输入非常相似 void init(int &x){ x=+ 阅读全文
摘要:
dfs实现数位DP int dfs(int d,int m1,int m2,bool fl) d:正在填从右往左第d位 m1表示数字和%k余数,m2表示该数%k余数 fl=1表示达到当前上限,0表示没限制(数位DP常规操作)…… 我一开始是从最高位开始枚举的,但是出了些问题,现在这个写法是从最低位枚 阅读全文
摘要:
看看大家都是$O(n)$的,小蒟蒻已经方得不行…… 那我来一篇$O(nk+nlogn)$的好了,还是可以AC哒 用$cnt_i$表示前i家中最低消费不超过$p$元的咖啡馆的数量 用$sum_{i,k}$表示前i家中k色调的客栈总数 我们枚举第一家客栈 并计算此时选择第二家客栈的方法总数 (就是有多少 阅读全文
摘要:
首先,我们发现n的范围非常大,m在1000以内。 我们知道,n>=m时,一定有一段数字和能被m整除。 所以,讨论n<m的情况。n在1000以内。 背包。dp[i][j]表示前i个数中取,和除以m余数为j的。 for(int i=1;i<=n;i++){ dp[i][a[i]]=1; for(int 阅读全文
摘要:
写在前面: 第一次认真写题解QwQ求赞 我初学dfs时遇到的第一题应该就是这道吧 本文面向初学者,说的较为详细 侧重于作者的做题过程 我相信很多人都会像我一样去做 枚举每一行的皇后的位置即可 对角线的处理非常令人迷茫 第一次尝试: 一开始,我兴奋地打了这样一个代码: 用二维数组vis标记一下能不能放 阅读全文