2026/6/9 22:37:20
网站建设
项目流程
营销型网站四大元素,wordpress板块,进空间的网站吗,做网站起什么题目shout out to professor Adzlpxsn.upd at oct 16th 2025, 修复了时间复杂度分析的重大失误.基本的, 状态, 转移, 方程状态一句话概况即为当前的属性.比如说, 贝贝现在是 3030 岁, 发了 00 张专辑, 我们就可以说 #xfffd;300f 300.这里我们说 3030 和 00 是不同的信息, 所…shout out to professor Adzlpxsn.upd at oct 16th 2025, 修复了时间复杂度分析的重大失误.基本的, 状态, 转移, 方程状态一句话概况即为当前的属性.比如说, 贝贝现在是3030 岁, 发了00 张专辑, 我们就可以说300f300.这里我们说3030 和00 是不同的信息, 所以一个状态fxy 里包含的信息其实有x 和y.同样的,,fx,yz 里包含的信息有33 个, 即xyz.转移转移, 就是说用fx推算fy, 或者用fx和fy推算fz.举个例子.贝贝的新专辑 金手指, 第x 首歌是 boombap 还是 trap 取决于第−1x−1 首和第−2x−2 首, 即(−1−2)mod2fx(fx−1fx−2)mod2. 那么我们就说fx由−1fx−1和−2fx−2转移而来.方程方程就是把转移的过程写成人类能看懂的东西, 比如 数学语言 自然语言 编程语言.线性 dp最简单的线性 dp, 就是跳跃问题.problem:AtCoder-dp_a考虑状态, 我们让fx表示现在位于stonex时最少跳了多少.转移就比较容易了,std::min(−2∣ℎ−2−ℎ∣,−1∣ℎ−1−ℎ∣)fxstd::min(fx−2∣hx−2−hx∣,fx−1∣hx−1−hx∣).没什么好讲的, 注意边界条件初始化就好了, 难的题就很难.背包 dp这个就好玩了.01 背包我个人觉得背包 dp 和线性 dp 大抵是有血缘关系的罢.problem:AtCoder-dp_d可以想到, 我们让fc表示在背包容量为c 时的最大价值.于是有转移方程std::max(,−)fcstd::max(fc,fc−wxvx).那么这时候我们有一个问题.如果内层循环从wx枚举到W, 那么有可能会造成重复选择, 但题意说每个物品只有11 个.于是我们可以调转内层循环的方向, 从W 枚举到wx, 此时每个物品就只会被选一次了.代码for(ll x1;xn;x) // 枚举每个物品for(ll cW;w[x]c;c--) // 枚举背包大小f[c]std::max(f[c],f[c-w[x]]v[x]); // 转移std::coutf[W]\n;完全背包再考虑, 如果每个物品可以选无数次呢?problem:洛谷-P1616显然, 只要把内层循环的方向调回去就可以了.for(ll x1;xn;x) // 枚举每个物品for(ll cw[x];cW;c) // 枚举背包大小f[c]std::max(f[c],f[c-w[x]]v[x]); // 转移std::coutf[W]\n;多重背包现在我们说, 每个物品不止有11 个, 但也不能无限选, 于是我们说物品x 有tx个, 这就是多重背包.problem:洛谷-1776如果当成tx个相同物品那么显然会超时, 因为∑∈[1,]≥∞x∈[1,n]∑tx≥∞.于是我们想, 我们学计算机最重要的是什么? 是二进制.是的, 我们只要拆分成二进制就好了.std::vectorllv,w;for(ll x1;xn;x){ll vx,wx,tx;std::cinvxwxtx;for(ll f1;ftx;f1){ // 二进制分解v.emplace_back(vx*f);w.emplace_back(wx*f);tx-f;} if(tx!0){ // 最后还剩一点点, 单独做成一个v.emplace_back(vx*tx);w.emplace_back(wx*tx);}}然后跑一遍 01 背包就解决了.分组背包当每一组物品里只能选11 个的时候应该怎么办呢?problem:洛谷-P1757这里留给读者思考, 简单放一下代码, 和 01 背包也差不多.ll t0;std::vectorstd::vectorllg(n1);for(ll x1;xn;x){ll s;std::cinw[x]v[x]s;tstd::max(t,s);g[s].emplace_back(x);}for(ll s1;st;s)for(ll cW;0c;c--)for(ll x:g[s])if(w[x]c)f[c]std::max(f[c],f[c-w[x]]v[x]);std::coutf[W]\n;时间复杂度总结像线性 dp 就是(∗)O(n∗k), 其中k 为转移复杂度, 比如之后会讲的优化就能搞出logklogn.背包 dp 就比较固定了, 都是(∗)O(n∗W). 特别的, 由于多重背包是二进制搞来的, 所以多重背包的′∑∈[1,]logn′x∈[1,n]∑logtx