首页 > 其他分享 >AT_abc_373F Solution

AT_abc_373F Solution

时间:2024-09-29 08:53:01浏览次数:8  
标签:abc 373F maxv Solution 枚举 num 物品

AT_abc_373F Solution

\(O(n^3)\) 的 dp 很容易想到,枚举重量,枚举物品,枚举物品选择数量,我们考虑把它优化到 \(O(n^2)\) ,显然重量与物品的枚举不能避免,所以我们考虑省去数量的枚举。
记 \(num_{i,j}\) 表示 总质量为 i 价值达到最大时,j 选择了多少个,对于当前枚举的重量 i ,我们枚举选择第 j 个物品,然后求一下 \(\max_1^n f_{i-w_j}+v_j-2num_{i-w_j,j}-1\) 记一下最大值对应的物品是哪个,用最大值更新 \(f_i\) ,顺便再用 \(num_{i-w_maxid,j}\) 更新一下 \(num_{i,j}\) 即可。
code

signed Main(){
  n = read(), W = read();
  for (Yc i = 1; i <= n; i++) w[i] = read(), v[i] = read();
  Yc ans = 0;
  for (Yc i = 1; i <= W; i++) {
    Yc maxv = 0, maxid;
    for (Yc j = 1; j <= n; j++) {
      if (w[j] > i) continue;
      if (f[i - w[j]] + v[j] - 2ll * num[i - w[j]][j] - 1ll > maxv) {
        maxv = f[i - w[j]] + v[j] - 2ll * num[i - w[j]][j] - 1ll;
        maxid = j;
      }
    }
    if (!maxv) continue;
    f[i] = maxv;
    for (Yc j = 1; j <= n; j++) num[i][j] = num[i - w[maxid]][j];
    num[i][maxid]++;
    ans = max(ans, f[i]);
  }
  //   for (Yc i = 1; i <= W; i++, ps(""))
  //     for (Yc j = 1; j <= n; j++) write(num[i][j]), pc(' ');
  write(ans), ps("");

  return 0;
}

标签:abc,373F,maxv,Solution,枚举,num,物品
From: https://www.cnblogs.com/yxans/p/18438795/AT_abc_373_F

相关文章

  • 题解 ABC373G【No Cross Matching】/ POJ3565【Ants】
    题目描述年轻的自然主义者比尔在学校里研究蚂蚁。他的蚂蚁以生活在苹果树上的蚜虫为食。每个蚂蚁群需要自己的苹果树来养活自己。比尔有一张地图,上面标有\(n\)个蚂蚁群和\(n\)棵苹果树的坐标。他知道蚂蚁从它们的蚂蚁群到它们的取食地点,然后返回蚂蚁群,都是使用化学标记的路线......
  • Solution - Kilonova 2837 P2
    先考虑q2。考虑到如果是以\(2^N\)为入手点因为进位的原因看起来就做不了。于是考虑以\(M\)为前缀入手。考虑刻画出\(M\)为前缀的数\(x\)的形式。可以考虑根据\(M\)后面的位数\(k\)来刻画,有\(x\in\bigcup_{k=0}^{\lfloor{\frac{L}{\log_210}}\rfloor}[M\tim......
  • [ABC176F] Brave CHAIN
    [ABC176F]BraveCHAIN题意给你\(3n\)个数字。每次你可以选取前\(5\)个数字,拿走里面任意三个数字,剩下两个,如果拿走的\(3\)个数字相等,得分\(+1\)。问最大得分是多少。思路首先我们想尝试贪心。然而不好贪心,因为你不知道前面会给你留下哪两张牌,留下的方案数很多。题目......
  • 【洛谷】AT_abc178_d [ABC178D] Redistribution 的题解
    【洛谷】AT_abc178_d[ABC178D]Redistribution的题解洛谷传送门AT传送门题解一个水水的动态规划,阿巴巴巴。题目大概是这样:给定一个正整数SSS,问有多少个数满足以......
  • P9676 [ICPC2022 Jinan R] Skills Solution
    P9676[ICPC2022JinanR]SkillsSolution拿到题目之后我们先考虑一个朴素dp:记\(f_{i,0/1/2,x,y}\)表示第\(i\)天,我们学习第1/2/3个技能,同时按照序号顺延下去的另两个技能分别有\(x,y\)天未学习的最大经验总和。这很明显是一个\(O(n^3)\)的dp,转移方程比较简单。我们......
  • [ABC274G] Security Camera 3
    [ABC274G]SecurityCamera3给你一个\(n\timesm\)的网格图,\(n,m\le300\),每个空地上可以放任意多个任意方向的监控,一个监控视野覆盖对应方向最长连续空地,问监控覆盖所有空地最小化监控数量。对于一个极长的连续空地,我们一定是在边边放置一个监控,而且两边是一样的,因此我们只......
  • ABC262G 题解
    LISwithStack观察到\(n\le50\),考虑区间dp。设\(dp(l,r,x,y)\)表示区间\([l,r]\)中选出的子序列的最小值\(\gex\),最大值\(\ley\)的方案数。根据栈的性质,设元素\(x\)入栈的时间为\(in_x\),出栈时间为\(out_x\),那么所有元素构成的区间\([in_x,out_x]\)两......
  • [ABC234G] Divide a Sequence
    [ABC234G]DivideaSequence给定长度为\(N\)的序列\(A\),我们定义一种将\(A\)划分为若干段的方案的价值为每一段的最大值减去最小值的差的乘积,你需要求出所有划分方案的价值的总和,答案对\(998244353\)取模。$1\\leq\N\\leq\3\\times\10^5$$1\\leq\A_i\\leq......
  • Record of ABC Notation Used in Obsidian
    Whentypingcodesnippet %%linebreak<none> X:1 K:Ctreble %Cmajor,fouroctaves: C,D,E,F,G,A,B,C|CDEFGABc| cdefgabc'|c'e'g'c''|inMakingMusicwithAbc2-ApracticalguidetotheA......
  • 题解:AT_abc204_e [ABC204E] Rush Hour 2
    变形的dijkstra。先思考什么情况下需要等待以及等待多长时间最优。我们把题目上的计算方法按照当前的时间\(t\)和通过所需的时间\(f(t)\)列个函数关系:\[f(t)=t+c+\lfloor\frac{d}{t+1}\rfloor\]然后用Desmos画个图可以得到图像(其实就是对勾函数):因为\(c,d\geq0\),所......