首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
[loj6089]小Y的背包计数问题
】的更多相关文章
[loj6089]小Y的背包计数问题
https://www.zybuluo.com/ysner/note/1285358 题面 小\(Y\)有一个大小为\(n\)的背包,并且小\(Y\)有\(n\)种物品. 对于第\(i\)种物品,共有\(i\)个可以使用,并且对于每一个\(i\)物品,体积均为\(i\). 求小\(Y\)把该背包装满的方案数为多少,答案对于\(23333333\)取模. 定义两种不同的方案为:当且仅当至少存在一种物品的使用数量不同. \(n\leq10^5\) 解析 这个背包问题让我耳目一新啊. \(idea\)…
loj6089 小 Y 的背包计数问题
link 吐槽: 好吧开学了果然忙得要死……不过为了证明我的blog还没有凉,还是跑来更一波水题 题意: 有n种物品,第i种体积为i,问装满一个大小为n的背包有多少种方案? $n\leq 10^5.$ 做法: 这种题一看就很想按根号分类是不是…… 设阈值大小为$m=\sqrt n$,对于体积$\leq m$的所有物品,直接跑多重背包: f[i][j]表示前i个物品,体积和为j的方案数,$f[i][j]=\sum f[i-1][j-ki],k\in [0,i]$. 记录sum[x]表示$\sum…
LOJ6089 小Y的背包计数问题(根号优化背包)
Solutioon 这道题利用根号分治可以把复杂度降到n根号n级别. 我们发现当物品体积大与根号n时,就是一个完全背包,换句话说就是没有了个数限制. 进一步我们发现,这个背包最多只能放根号n个物品. 所以我们设dp[i][j]表示放了i个物品,体积为j时的方案数. 转移的话一种是往背包里放一个新物品,或者让背包里所有物品体积加1. 当物品体积小于根号n时,因为物品个数比较少,所以我们可以设计状态为dp[i][j]表示前i个物品,占用j的体积为j时的方案数. 然后我们发现它的同类转移点是在模i的剩…
LOJ6089 小Y的背包计数问题 背包、根号分治
题目传送门 题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模.$N \leq 10^5$ $23333333=17 \times 1372549$竟然不是质数性质太不优秀了(雾 直接跑背包$O(N^2)$,于是咱们考虑挖掘性质.分开计算 发现当$i < \sqrt{N}$时就是一个多重背包,用单调队列优化到$O(N \sqrt{N})$ 而当$i \geq \sqrt{N}$时,选中物品的数量不会超…
LOJ6089 小Y的背包计数问题 背包
正解:背包 解题报告: 先放传送门! 好烦昂感觉真的欠下一堆,,,高级数据结构知识点什么的都不会,基础又麻油打扎实NOIp前的题单什么的都还麻油刷完,,,就很难过,,,哭辣QAQ 不说辣看这题QwQ! 首先注意到当i>=√n时相当于是有无穷个的 可以想到对不同的物品数量进行分类讨论 对于i<√n,就最普通的背包,f[i][j]:第i个物品已装容量为j的方案数 转移就是f[i][j]=∑f[i-1][j-k*i](0<=k<=i)(这个显然可以降维变成f[i]:容量为i的方案数 然后…
【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要考虑所有的情况,那么设\(f[i][j]\)表示前\(i\)个物品装了体积\(j\)的方案数. 显然\(f[i][j]=\sum_{k=1}^i f[i][j-k*i]\)转移过来,那么按照\(i\)分剩余类,前缀和转移即可. 这一部分的复杂度是\(O(n\sqrt n)\) 第二类:\(i\ge…
LOJ #6089. 小 Y 的背包计数问题
LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选\(\sqrt n\)个数,所以数量就没有卵用了.然后就用完全背包的一个常见套路(?)可以对一个空的序列整体+1或者在最左边加上一个\(\sqrt n+1\),这个操作序列和完全背包的选择方案一一对应.感性理解一下是对的emmmm,复杂度\(O(n\sqrt n)\) \(<=\sqrt n\)的部分只…
LOJ#6089 小 Y 的背包计数问题 - DP精题
题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/109141757) 在起码了解了背包DP后,我们来做这道题 既然每种物品最大可占据 i*i 的空间,设 那么 和 两种情况肯定是不同的 ,而且应该可以分开处理 由于 时 i 的范围很小,可以在一个处理到一半的背包上(即处理了[sq+1,n]的背包dp数组)继续跑(背包大小 * 物品数),所…
loj 6089 小 Y 的背包计数问题——分类进行的背包
题目:https://loj.ac/problem/6089 直接多重背包,加上分剩余类的前缀和还是n^2的. 但可发现当体积>sqrt(n)时,个数的限制形同虚设,且最多有sqrt(n)个物品. 所以体积<=sqrt(n)的物品多重背包,大于sqrt(n)的就变成最小值是sqrt(n)+1.最多有sqrt(n)个物品的方案数,可以用那种“整体+1 或 新增一列”的套路解决. #include<iostream> #include<cstdio> #include<…
LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
题目:https://loj.ac/problem/6089 对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k <= i ) f[i-1][j - k*i] 可以用前缀和优化,因为第 i 次只会用到间隔为 i 的和: 对于 i > √n ,最多选 √n 个,所以设 g[i][j] 表示用 i 个,体积为 j 的方案数: 每种方案如果排一个序,就是一个最小值为 √n + 1 的不降序列,所以算出不降序列的个数…