logo AlgoBeat OnlineJudge
登录 注册

Official Editorial

作者: 035966_L3  ·  发布于 2026-07-17 22:13:44  ·  最后修改于 2026-07-17 22:26:16
已通过
审核员:joe_zxq 彩笔 · 2026-07-17 22:26:16

https://scg3.piaoztsdy.cn/p/269

表示能否在前 个物品中选出总价为 且标签值的异或和为 的物品集合,然后可以参考 01 背包做 DP。

#include <bits/stdc++.h>
using namespace std;
const int M = 100 + 12, V = 1023, T = 1023 + 12;
bool dp[M][T];
int main()
{
	freopen("knapsack.in", "r", stdin);
	freopen("knapsack.out", "w", stdout);
	dp[0][0] = true;
	int n, m;
	cin >> n >> m;
	while (n--)
	{
		int w, l;
		cin >> w >> l;
		for (int i = m; i >= w; i--)
			for (int j = 0; j <= V; j++)
				dp[i][j] |= dp[i - w][j ^ l];
	}
	for (int i = V; i >= 0; i--)
		for (int j = m; j >= 0; j--)
			if (dp[j][i])
			{
				cout << i << endl;
				return 0;
			}
	return 0;
}

暂无评论

登录 后即可评论。