LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点. 仔细观察n==10的点 可以发现我们暴力枚举 某个物品不选之后的最大值即可.设状态f[i][j]表示第i个物品不选此时钱数为j的最大值. 求出这个复杂度是n^2m的 然后可以O(1)回答询问. 考虑正解 可以发现 对于01背包或者多重背包 去掉一个物品询问最大价值 动态直接去掉是不现实的. 考虑…
题目描述 " 寄 没 有 地 址 的 信 ,这 样 的 情 绪 有 种 距 离 ,你 放 着 谁 的 歌 曲 ,是 怎 样 的 心 情 . 能 不 能 说 给 我 听 ." 失忆的 Eden 总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给 Eden 出谜题:在 valentine's day 的夜晚,两人在闹市 中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden 这样的 一个问题:有 n 个玩偶,每个玩偶…
当时一直在想前缀和...多亏张队提醒... 从1到n背次包,保存每一个状态下的价值,就是不要把第一维压掉:再从n到1背一次,同样记住每种状态: 然后询问时相当于是max(前缀+后缀),当然前缀后缀中间去掉了一个应去掉的商品. #include<cstdio> #include<iostream> #define R register int using namespace std; inline int g() { R ret=,fix=; register :fix; +(ch^…
题目 求出从前往后的背包\(f_{i,j}\)和从后往前的背包\(F_{i,j}\). 那么对于询问\((d,e)\),答案就是\(\max\limits_{i=0}^e f_{d-1,i}+F_{d+1,e-i}\). 然后就是单调队列优化多重背包. 记物品有\(c[i]\)个,价值为\(v[i]\),代价为\(w[i]\). 多重背包的转移\(f[i][j]=\max\limits_{k=0}^{min(c[i],\lfloor\frac j{w[i]}\rfloor)}(f[i-1][j-…
P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 j 的最大价值 然后正着反着跑 多重背包 最后答案考虑 i 之前的物品的价格和  i 之后的物品的价格,转移如下: 代码 #include<bits/stdc++.h> using namespace std; inline int read() { ; char last=' ',ch=getc…
思路很妙的背包 用了一些前缀和的思想 去掉了一个物品,我们可以从前i-1个和后i+1个推出答案 奇妙的思路 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; ][][]={},v[]={},w[],num[],n,q,V; void zypack(int w,int v,int j,int wic){ ) for(int i=V;i>=v;i--) f[j]…
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   const int V = 1000; const int maxn = 1009;   int L[maxn][maxn], R[maxn][maxn]; int w[maxn], v[maxn], c[maxn], N…
3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 428  Solved: 277[Submit][Status][Discuss] Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valent…
https://www.luogu.org/problemnew/show/P4095 不太会.. 网上有神奇的做法: 第一种其实是暴力(复杂度3e8...)然而可以A.考虑多重背包,发现没有办法快速删除某个物品造成的贡献.考虑对于每个i,求出an1[i]和an2[i],分别表示对于[1,i]和[i,n]区间内所有物品的答案数组(如an1[i][j]表示[1,i]区间内用掉容量j可以带来的最大贡献),这个就是用普通多重背包求出来(可能要优化一下多重背包,以下用了二进制优化).每次询问(x,y),…
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine's day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择…
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine's day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择…
Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine’s day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择买哪些玩偶…
数据极水,不加优化的多重背包都能过...早知道考试的时候不加奇奇怪怪的卡常优化,卡了45分... 就是从前往后做一个多重背包,从后往前再做一个,问的时候就暴力求一下跳过这个的最佳方案... #include <iostream> #include <cstdio> #include <cstring> using namespace std; int f[1005][1005],g[1005][1005],n; struct VAN { int a,b,c; } p[1…
多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~n号物品花了j块钱的最大价值(这里我将所有的物品编号都加了1,原因……因为我一开始没+1,WA了QAQ) 然后询问的时候$ans=max_{j=0}^{e}\{ans,g1[d-1][j]+g2[d+1][e-j]\}$ 因为编号是0~n-1,所以这里$d-1$这一项是会越界的!不知为什么在CH上过…
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她的音容笑貌. 记忆中,她总是喜欢给Eden出谜题:在 valentine's day 的夜晚,两人在闹市中闲逛时,望着礼品店里精巧玲珑的各式玩偶,她突发奇想,问了 Eden这样的一个问题:有n个玩偶,每个玩偶有对应的价值.价钱,每个玩偶都可以被买有限次,在携带的价钱m固定的情况下,如何选择…
分治背包+单调队列优化. 但是为什么maxn要1w多?...不怎么懂. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<cstdlib> #define maxn 10050 #define maxs 1050 #define maxm 300500 using namespace s…
多重背包,$q$ 次询问,每次问删一个物品之后花费 $x$ 能装多少物品 $n \leq 3000, x \leq 1000, q \leq 300000$ sol: 网上有很多假做法 正解应该是考虑分治 先二进制拆物品,然后记 $solve(l,r)$ 表示不考虑 $[l,r]$ 的操作的 dp 每次递归的时候先把 $[mid+1,r]$ 的 dp 数组搞出来,然后递归 $[l,mid]$,然后删除 $[mid+1,r]$ 同样的,把 $[l,mid]$ 的 dp 数组搞出来,递归 $[mid…
有一点乱搞吧......对人对背包的理解有些考验,要想知道去掉某个点的值,可以选择对前缀求一次背包,后缀求一次背包,而且不省掉价钱那一维, 这样每个点就可以由前后组合成了,枚举一下价钱取max即可 直接01的多重背包就可以过 #include<bits/stdc++.h> using namespace std; ; int n,m,q,ans,v[maxn],w[maxn],c[maxn]; int f[maxn][maxn],g[maxn][maxn]; int main(){ scanf…
3164: [Heoi2013]Eden的博弈问题 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 134  Solved: 98[Submit][Status][Discuss] Description 对于有两个玩家的,状态透明且状态转移确定的博弈游戏,博弈树是常用的分析工具.博弈树是一棵有根树,其中的节点为游戏的状态.若节点B的父亲是A,则说明状态A能通过一次决策转移到状态B.每个状态都有一个唯一的决策方,即这个状态下应该由哪一方做出决策.我…
[Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #include <algorithm> #include <cstdio> #include <cstring> #define nullptr NULL const int MAXN = 300010; int n, a[MAXN]; namespace HLD { int…
3223. [HBOI2013]Ede的新背包问题 (Standard IO) Time Limits: 2000 ms  Memory Limits: 262144 KB  Detailed Limits   Goto ProblemSet Description…
传送 这道题最最暴力的方法就是对于每一个询问都跑一边多重背包问题,但显然q不会那么友好的让我们用暴力过掉这道题. 考虑优化.我们可以先把裸的多重背包搞成二进制优化后的多重背包.但是复杂度依然无法接受.接下来使用吸氧和register等玄学优化 然而你发现你还是T了 那我们可不可以记录下来第i种不选,总容量为j($1\leq j\leq 1000$时的最大价值?想法很好,但是暴力写出来复杂度还是太高(O(\(1000n^2logn\))) 暴力写出来的 for(int i=1;i=st[i]&&am…
题目链接:https://www.luogu.org/problemnew/show/P3258 谁说树剖过不去会RE呢? 我今天就是要强行树剖了 树剖强艹 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; const int maxn = 500010; ll ans[…
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前来参观,并且还指定一份参观指南,他希望维尼能够按照他的指南顺序,先去a1,再去a2,......,最后到an,去参观新家.可是这样会导致维尼重复走很多房间,懒惰的维尼不停地推辞.可是松鼠告诉他,每走到一个房间,他就可以从房间拿一块糖果吃. 维尼是个馋家伙,立马就答应了.现在松鼠希望知道为了保证维尼有…
线性代数+图论好题. 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3168 (luogu) https://www.luogu.org/problemnew/show/P4100 题解: 首先有一个结论是,设矩阵\(C\)满足\(CA=B\), 则\(A\)的第\(i\)行可以被\(B\)的第\(j\)行来替代当且仅当\(C_{j,i}\ne 0\). 这个的话就是一定要记住,矩阵初等变换的实质就是给它左乘一个初等矩…
原题传送门 这珂以说是李超线段树的模板题 按着题意写就行了,时间复杂度为\(O(n\log^2n)\) #include <bits/stdc++.h> #define N 40005 #define db double #define getchar nc using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fre…
题目链接 \(Click\) \(Here\) 李超线段树的模板.但是因为我实在太\(Naive\)了,想象不到实现方法. 看代码就能懂的东西,放在这里用于复习. #include <bits/stdc++.h> using namespace std; const int N = 100010; #define ls (p << 1) #define rs (p << 1 | 1) #define mid ((l + r) >> 1) struct Nod…
传送门 吐槽题目标题 这个依赖关系是个树,可以考虑树型dp,设f_i表示子树i的答案 因为这是个序列问题,是要考虑某个数的位置的,所以设\(f_{i,j}\)表示子树i构成的序列,i在第j个位置的方案.转移依次合并儿子\(y\),每次枚举一个位置j,以及枚举儿子\(y\)的序列中有k个数放在插前面,可以得到\(f_{x,j+k}\leftarrow f_{x,j}*w*\binom{j-1+k}{k}*\binom{sz_x+sz_y-j-k}{sz_y-k}\),组合数即考虑插入的方式 还有一…
这题真的神奇了……蜜汁复杂度(`・ω・´) 应该是一个比较连贯的思维方式:去掉一个物品,那么我们转移的时候不考虑它就好了呗.考虑暴力:每一次都对剩余的n - 1个物品进行多重背包转移,获得答案.既然可以优化,就说明一定有重复计算的地方——画出一张方格图,把不需要的格子涂掉——我们突然发现每一个可以有两部分组成,而两部分可以递推得到!那就很简单了:A[i][]表示选择n ~ i 这些物品能获得的最大值,B[i][]表示选择1~i的物品所能获得的最大值. 答案就是两部分的AB数组暴力合并即可. #i…
BZOJ上的权限题,流下了贫穷的泪水... 可持久化trie的题. 一开始zz了,看错了题,以为是要把所有的宝石缩起来,后来仔细一看好像只缩一次...昨天刷了一晚上的语文病句题白做了... 这样的话就可以枚举以每个点为次大值,求出可以异或的区间,用可持久化trie做.维护可以异或的区间可以用set求. #include <iostream> #include <algorithm> #include <cstdio> #include <set> #incl…