1 条题解

  • 0
    @ 2026-6-11 20:46:01

    记 fi,j,kf_{i, j, k} 表示能否在前 ii 个物品中选出总价为 jj 且标签值的异或和为 kk 的物品集合,然后可以参考 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;
    }
    
    • 1

    信息

    ID
    269
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    25
    已通过
    16
    上传者