首页 > 其他分享 >Note - O(nV) 求只关心一个位置的 01 背包

Note - O(nV) 求只关心一个位置的 01 背包

时间:2024-10-10 20:32:31浏览次数:8  
标签:10 01 int d% Note BASE le maxm nV

给定序列 \(a_{1\sim n}\),其中 \(0\le a_i\le m\)。
给定 \(V\)。询问是否存在 \(S\subseteq \{1, 2, \cdots, n\}\) 满足 \(\sum\limits_{i\in S} a_i = V\)。

\(n\ge 1, m, V\ge 0, n, m\le 10^4, V\le nm\)。

先咕一下,贴个代码(

#include<bits/stdc++.h>
const int maxn = 1e4 + 10, maxm = 2e4 + 10, BASE = 1e4 + 2;
int a[maxn], F[maxm], G[maxm];
int main() {
   int n, m, V; scanf("%d%d%d", &n, &m, &V);
   for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
   int p = 0;
   while (p < n && V >= a[p + 1]) V -= a[++p];
   if (p == n)
      return printf("%d\n", ! V), 0;
   int *f = F + BASE, *g = G + BASE;
   f[V] = p + 1;
   for (int i = p + 1; i <= n; i++) {
      memcpy(g - m, f - m, sizeof(int) * (m + m + 1));
      for (int j = m; j - a[i] >= -m; j--)
         f[j - a[i]] = std::max(f[j - a[i]], g[j]);
      for (int j = -m; j <= m; j++)
         for (int k = std::max(g[j], 1); k < f[j]; k++)
            if (j + a[k] <= m)
               f[j + a[k]] = std::max(f[j + a[k]], k);
   }
   printf("%d\n", f[0] > 0);
   return 0;
}

标签:10,01,int,d%,Note,BASE,le,maxm,nV
From: https://www.cnblogs.com/rizynvu/p/18457084

相关文章

  • 鸿蒙初学001-构建第一个ArkTS应用(Stage模型)
    https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/application-dev-guide-V5HarmonyOSSDK介绍:从HarmonyOSNEXTDeveloperPreview1(API11)版本开始,HarmonyOSSDK以Kit维度提供丰富、完备的开放能力,涵盖应用框架、系统、媒体、图形、应用服务、AI六大领域,例如......
  • 【玩转 JS 函数式编程_010】3.2 JS 函数式编程筑基之:以函数式编程的方式活用函数(上)
    写在前面按照惯例,过长的篇幅分开介绍,本篇为JavaScript函数式编程核心基础的第二部分——以函数式编程的方式活用函数的上篇,分别介绍了JS函数在排序、回调、Promise期约、以及连续传递等应用场景下的用法演示。和之前章节相比难度又有一定的提升。准备好了吗?3.2.以......
  • 【01】DataFrame的创建和属性
    DataFrame是一个表格型的数据结构,可以看成就是excel中的表格。官方文档:https://pandas.pydata.org/docs/reference/frame.htmlDataFrame的创建DataFrame构造方法如下:pandas.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)data:DataFrame的数据部......
  • 501 距离和
    //501距离和.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/5/problem/224有一棵n个节点的树,节点编号从1到n。请求出每个节点到其他所有节点的距离的和。定义两个节点的距离为它们之间的简单路径上经过了多少条......
  • [Java/Spring] 深入理解 : Spring BeanFactory / ApplicationContext、Environment、P
    PropertySource:解析环境资源及配置的底层组件org.springframework.core.env.PropertyResolverEnvironment:管理环境的配置与资源org.springframework.core.env.Environment其继承接口PropertyResolver属性解析器,用来解析不同属性源PropertySource里的key......
  • [JOI 2013 Final]彩灯
    [JOI2013Final]彩灯题意给出一个\(01\)序列,可以把一段区间反转。求反转后序列最长的交替子段,即\(010101\ldots\)或\(101010\ldots\)。思路首先发现一个性质,反转的一定是一段交替子段。因为反转不交替子段对答案的贡献不优。枚举反转哪一段交替子段,统计左右两边的......
  • [JOI 2013 Final]JOIOI 塔
    [JOI2013Final]JOIOI塔题意给出一个由\(\text{JOI}\)组成的字符串,可从中取出一些子序列。求最多取出多少\(\text{IOI}\)和\(\text{JOI}\)。思路若答案\(x\)可行,则所有\(y<x\)均可行,若答案\(x\)不可行,则所有\(y>x\)均不可行。这样就可以可行性二分。考虑如......
  • [JOI 2013 Final]现代豪宅
    [JOI2013Final]现代豪宅题意给出一个\(n\timesm\)的网格图,每两个格子之间有一扇门。初始上下方向的门都是开着的,左右方向的门是关着的。有一些格子有按钮,可以把打开的门关上,关上的门打开。走一步需要一秒,按按钮需要一秒,求从\((1,1)\)到达\((n,m)\)的最小步数。思路......
  • [JOI 2013 Final]搭乘 IOI 火车
    [JOI2013Final]搭乘IOI火车题意给出两个由\(\text{OI}\)组成的字符串\(S,T\)。可以删除每个字符串的前缀和后缀。每次从剩下部分的第一位取出一个字符放到新的字符串中。要求新字符串必须以\(\text{I}\)开头结尾,相同的字符不能相邻,求新字符串的最大长度。思路定义......
  • 01 torch基础
    学习参考:https://deeplizard.com/预备知识GPU是实现并行计算的硬件,CUDA是一个为开发人员提供api的软件层。PyTorch里面内置CUDA,无需额外下载,所需要的是GPU处理简单任务用CPU更合适,因为移入GPU成本很高CUDA与PyTorch的结合使用PyTorch利用CUDA,即在GPU上执行计算,只需要将张......