首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
Nowcoder217D msc的背包 背包、生成函数、组合
】的更多相关文章
Nowcoder217D msc的背包 背包、生成函数、组合
传送门 发现这是一个背包问题,而\(k\)又很大,考虑生成函数方式解决这个问题. 对于体积为\(1\)的物品的生成函数为\(\frac{1}{1 - x}\),体积为\(2\)的物品的生成函数为\(\frac{1}{1 - x^2}\),那么我们要求的就是\([x^k](\frac{1}{1-x})^n (\frac{1}{1-x^2})^m\). 而\((\frac{1}{1-x})^n = (\frac{1}{1-x^2})^n \times (1 + x)^n\),所以原生成函数等于\((…
LuoguP4389 付公主的背包【生成函数+多项式exp】
题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装10^5105大小的东西 付公主有n种商品,她要准备出摊了 每种商品体积为Vi,都有10^5105件 给定m,对于s\in [1,m]s∈[1,m],请你回答用这些商品恰好装s体积的方案数 输入输出格式 输入格式: 第一行n,m 第二行V1~Vn 输出格式: m行,第i行代表s=i时方案数,对998244353取模 输入输出样例 输入样例#1: 2 4 1 2 输出样例#1: 1 2 2 3 说明 对于30%的数据,n<=300…
Codeforces 1111D(退背包、排列组合)
要点 优质题解 因为只有某type坏人全部分布在同一撇时,才能一次消灭.所以题目安排完毕后一定是type(x)和type(y)占一半,其余占另一半. 实际情况只有52*52种,则预处理答案 枚举某两种,并连续两次使用退背包得到无排列的方案数,真·答案是有排列的,乘上一个排列数即可,而根据式子,排列数恰好与方案细节无关,是个与\(|s|\)和全部\(cnt[i]\)有关的定值 const int maxn = 1e5 + 5; const int mod = 1e9 + 7; string s;…
C - Thief in a Shop - dp完全背包-FFT生成函数
C - Thief in a Shop 思路 :严格的控制好k的这个数量,这就是个裸完全背包问题.(复杂度最极端会到1e9) 他们随意原来随意组合的方案,与他们都减去 最小的 一个 a[ i ] 组合的方案数目是不会改变的 那么我们就 dp [ i ]表示 i 这个价格需要的最少 个数. 这样求最小个数保证不会漏解 然后 如果这个 i 能通过 1 - k 个物品组合出来,那么 一定能通过k 个物品组合出 i + k * a [ 1 ]. #include<bits/stdc++.h> us…
Luogu4389 付公主的背包(生成函数+多项式exp)
显然构造出生成函数,对体积v的物品,生成函数为1+xv+x2v+……=1/(1-xv).将所有生成函数乘起来得到的多项式即为答案,设为F(x),即F(x)=1/∏(1-xvi).但这个多项式的项数是Σvi级别的,无法直接分治FFT卷起来. 我们要降低多项式的次数,于是考虑取对数,化乘为加,得到lnF(x)=-Σln(1-xvi).只要对每个多项式求出ln加起来再exp回去即可. 考虑怎么对这个特殊形式的多项式求ln.对ln(1-xv)求导,得ln(1-xv)'=(1-xv)'/(1-xv)=-v…
P4389-付公主的背包【生成函数,多项式exp】
正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 \(n\)种物品,第\(i\)种大小为\(v_i\),数量无限.对于每个\(s\in[1,m]\)求刚好填满\(s\)容量的方案数. \(1\leq n,m\leq 10^5\) 解题思路 统计和为一定值的方案数,好像可以生成函数做? 每种物品大小\(v\)有一个生成函数 \[F(x)=\sum_{i\geq 0}x^{i\times v}=\frac{1}{1-x^v} \] 然后所有生成函…
洛谷.1782.旅行商的背包(背包DP 单调队列)
题目链接(卡常背包) 朴素的多重背包是: \(f[i][j] = \max\{ f[i-1][j-k*v[i]]+k*w[i] \}\),复杂度 \(O(nV*\sum num_i)\) 可以发现求\(\max\)时有很多值是被重复枚举过的 换一种方程表示形式,对于每个\(v[i]\),设\(j=K*v[i]+r,\quad K=j/v[i],\quad r=j\%v[i]\),即按照\(\%v[i]\)的余数分别进行dp(第二层枚举余数\(r\)) 再枚举\(k=0\sim K-1\)(去掉\…
nyoj860 又见01背包(背包变形)
题目860 pid=860" style="text-decoration:none; color:rgb(55,119,188)">题目信息 执行结果 本题排行 讨论区 又见01背包 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 有n个重量和价值分别为wi 和 vi 的 物品.从这些物品中选择总重量不超过 W 的物品,求全部挑选方案中物品价值总和的最大值. 1 <= n <=100 1 <= wi <…
luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点. 仔细观察n==10的点 可以发现我们暴力枚举 某个物品不选之后的最大值即可.设状态f[i][j]表示第i个物品不选此时钱数为j的最大值. 求出这个复杂度是n^2m的 然后可以O(1)回答询问. 考虑正解 可以发现 对于01背包或者多重背包 去掉一个物品询问最大价值 动态直接去掉是不现实的. 考虑…
[CTS2019]珍珠(NTT+生成函数+组合计数+容斥)
这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数据,根据转移系数建立矩阵,跑一遍矩阵快速幂,复杂度O(D3logn),不过要注意卡常数,因为是稀疏矩阵可以判掉无用状态. 对于m较小数据,m=0快速幂,m=1为Dn-A(n,D),m=2暴力讨论一下有没有出现>=1次的值,如果有,唯一出现>=1次的值是出现2次还是3次. 当然还是水平低啊不会正解.…