AT_abc_373F Solution

AT_abc_373F Solution

O(n3) 的 dp 很容易想到,枚举重量,枚举物品,枚举物品选择数量,我们考虑把它优化到 O(n2) ,显然重量与物品的枚举不能避免,所以我们考虑省去数量的枚举。
numi,j 表示 总质量为 i 价值达到最大时,j 选择了多少个,对于当前枚举的重量 i ,我们枚举选择第 j 个物品,然后求一下 max1nfiwj+vj2numiwj,j1 记一下最大值对应的物品是哪个,用最大值更新 fi ,顺便再用 numiwmaxid,j 更新一下 numi,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;
}
posted @   yxans  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示