AtCoder ABC321F - #(subset sum = K) with Add and Erase 题解 回滚背包
题目链接:https://atcoder.jp/contests/abc321/tasks/abc321_f
题目大意:
给定大小为 k 的背包和 q 次操作,支持两种操作:
- 插入一个大小为 x 的元素;
- 删除一个大小为 x 的元素。
每次操作后,求装满背包方案数。
解题思路:
可撤销背包。
- 插入 x 时,for i = K -> x 执行
f[i] += f[i-x]
- 删除 x 时,for i = x -> K 执行
f[i] -= f[i-x]
(虽然我代码里是用 V
表示背包容量的)
示例程序:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 5050;
const long long mod = 998244353;
int q, V, x;
char op[2];
long long f[maxn] = { 1 };
int main() {
scanf("%d%d", &q, &V);
while (q--) {
scanf("%s%d", op, &x);
if (op[0] == '+') {
for (int i = V; i >= x; i--)
f[i] = (f[i] + f[i-x]) % mod;
}
else {
for (int i = x; i <= V; i++)
f[i] = (f[i] - f[i-x] + mod) % mod;
}
printf("%lld\n", f[V]);
}
return 0;
}
双倍经验:洛谷P4141 消失之物
标签:
回滚背包
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
2019-11-25 洛谷P1638 逛画展 题解 尺取法/双指针/队列
2019-11-25 洛谷P1776 宝物筛选 题解 多重背包
2019-11-25 洛谷P1385 密令 题解 动态规划
2019-11-25 洛谷P1720 月落乌啼算钱 题解 斐波那契数列/特征方程求解
2019-11-25 [转]特征方程
2019-11-25 洛谷训练新手村之“BOSS战-入门综合练习1”题解
2019-11-25 洛谷训练新手村之“过程函数与递归”题解