多重背包, 要求 \(N\log N\) 复杂度 Solution 众所周和, \(1-N\) 之内的任何数可以由 \(2^{0}, 2^{1}, 2^{2} ... 2^{\log N}, N - 2^{\log N}\) 拼凑而成 我们知道一定有一种最优方案, 使得第 \(i\) 种物品只消耗 \(x\) 个 \((x <= n_{i})\) 而 \(x\) 可以被二进制凑出来 所以我们先二进制拆分物品件数, 再跑 \(01\) 背包即可 P1776 宝物筛选_NOI导刊2010提高(02)…
P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物.看来小FF只能含泪舍弃其中的一部分宝物了……小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件.他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为v[i],重量为w[i],每种…
题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物.看来小FF只能含泪舍弃其中的一部分宝物了……小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件.他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为v[i],重量为w[i],每种宝物有m[i]件.小FF希望在采集车不超载的前提下,选…
题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物.看来小FF只能含泪舍弃其中的一部分宝物了……小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件.他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为W的采集车,洞穴里总共有n种宝物,每种宝物的价值为v[i],重量为w[i],每种宝物有m[i]件.小FF希望在采集车不超载的前提下,选…
传送门 多重背包板子题, 多重背包就是每种东西有好几个,可以把它拆分成一个一个的01背包 优化:二进制拆分(拆成1+2+4+8+16+...) 比如18=1+2+4+8+3,可以证明18以内的任何数都可以用这几个数的和表示, 所以就把2个,4个....绑定为一个物品,和一个一个的效果是一样的 这样就减少了拆分出来的物品的数量. 代码如下 #include<cstdio> #include<iostream> using namespace std; ; int n,m,a,b,c,…
为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特别不喜欢把\(v\)和\(w\)反着搞,\(weight\)和\(value\)嘛!),直接给转移方程 \[f_{i,j}=\max\{f_{i-1,j-kw_i}+kv_i\},k\in[0,min\{m,\lfloor \frac j{w_i}\rfloor\}]\] 显然,\(f_i\)都是从…
Sto flashhu orz flash太强啦 多重背包裸题(逃 使用压维大法,\(f_i\)为总重量为\(i\)时的答案 对于每种物品,记\(w\)为单个的重量,\(v\)为单个的价值,\(m\)为数量,列出转移方程\[f_i=min\{f_{i-jw}+jv\}(0\leq j\leq m,i-jw \geq 0)\] 数据范围较大,我们可以二进制优化 同样也可以用单调队列,令\(i=kw+b\)(按照余数分组)原方程可以变为\[f_i=min\{f_{kw+b-jw}+(k+j-k)v\…
P1799 数列_NOI导刊2010提高(06)f[i][j]表示前i个数删去j个数得到的最大价值.if(i-j==x) f[i][j]=max(f[i][j],f[i-1][j]+1); else f[i][j]=max(f[i][j],f[i-1][j]); f[i][j]=max(f[i-1][j-1],f[i][j]); #include<iostream> #include<cstdio> #include<queue> #include<algorit…
P1771 方程的解_NOI导刊2010提高(01) 按题意用快速幂把$g(x)$求出来 发现这不就是个组合数入门题吗! $k$个人分$g(x)$个苹果,每人最少分$1$个,有几种方法? 根据插板法,显然答案为$C(g(x)-1,k-1)$ 蓝后写个高精度.(我曾经十分天真地认为$ans<=10^{50}$) 这里用压位+结构体重载高精.可以应对$ans<=10^{24*7}$的数据. #include<iostream> #include<cstdio> #inclu…
[题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ADD(x):把x元素放进BlackBox; GET:i加1,然后输出Blackhox中第i小的数. 记住:第i小的数,就是Black Box里的数的按从小到大的顺序排序后的第i个元素. 现在要求找出对于给定的命令串的最好的处理方法.ADD和GET命令分别最多200000个.现在用两个整数数组…