首页 > 小苯的01背包(easy)
头像 Lambda_L
发表于 2026-04-25 00:57:53
思路对结果进行按位贪心,因为高位如果可以为 的话肯定无脑选,所以从高位到低位贪心Code void solve() { cin >> n >> k; vi v(n), w(n); for (int i = 0; i < n; i++) { 展开全文
头像 Rain_Fly
发表于 2024-05-25 23:08:15
这道题其实是一道思维题目,我们可以观察到,价值&的越多,答案可能会越小,而体积&的越多反而对我们越有利,由于数据范围并不大,可以直接枚举答案,枚举每种价值,再枚举每个物品价值,如果&进来不会影响,就加进来,因为体积&是更有利的,意思就是把每个满足当前价值的物品体积&a 展开全文
头像 AliLexiWalker
发表于 2026-04-25 00:21:13
从大到小试答案,某一位能找到一种选法同时满足价值不掉到这位以下且体积不超k就留,不行就删,最后剩下的就是最优值。 void solve(){ int n,k;cin>>n>>k; vi v(n),w(n); for(int i=0;i<n;++i 展开全文
头像 牛客305305017号
发表于 2026-04-25 10:32:13
#include <bits/stdc++.h> using namespace std; int main() { int n, k; cin >> n >> k; vector<int> v(n), w(n); f 展开全文
头像 BaiJay
发表于 2026-04-25 16:51:01
注意到:由于是按位与操作,所以选取的物品越多,结果是一定不会增的,而且,如果我们想让答案中这一位为1,一定要选取的所有数的这一位都为1才行,所以我们从高位开始构建结果,由于一个物品可以反复进行添加,他对结果是没有影响的,所以我们在枚举每一位的时候直接枚举所有的元素就行 #include <bi 展开全文
头像 此在Dasein
发表于 2026-04-25 03:43:43
1. 问题分析 本题是一道变型的背包问题,其核心约束与目标函数均由传统的“算术求和”转变为“位运算按位与(Bitwise AND)”。这一转变彻底改变了问题的数学完备性与贪心策略的应用边界。 核心矛盾: 在标准背包问题中,增加物品会导致总体积单调增加,而在本题中,按位与运算具有非增性()。这意味着: 展开全文
头像 olone
发表于 2026-04-25 11:18:52
#include<bits/stdc++.h> using namespace std; const int N = 2e3 + 5; int n, k; int v[N], w[N]; int f[N]; bool vis[N][N]; vector<int> V 展开全文
头像 牛客858537758号
发表于 2026-04-25 16:35:55
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc. 展开全文

等你来战

查看全部