当前位置: 首页 > news >正文

根号算法Ⅰ

目录

  • 根号分治
    • 小 Y 的背包计数问题
  • 分块
    • 分块题常见操作
      • 修改:
      • 查询
    • 教主的魔法

根号分治

小 Y 的背包计数问题

link
思路
很经典一道背包计数问题。
直接完全背包做肯定是不行的。我们不希望有那么多的物品,考虑根号分治。

  1. 对于体积 ≤n\le \sqrt nn 的物品:
    直接使用多重背包计数,设表明考虑只从前 iii 个物品中取物品,取出的物品总体积为 jjj 的方案数,则转移方程为:fi,j=∑k=0ifi−1,j−i×kf_{i,j}= \sum_{k=0}^{i} f_{i-1,j-i\times k}fi,j=k=0ifi1,ji×k
    可以使用类似于前缀和优化的方式进行优化转移,还可以滚动优化掉 iii 这一维(当然不用滚动数组也不会爆空间)。
  2. 对于体积 >n\gt \sqrt{n}>n 的物品:
    发现每类物品最多只能取 n\sqrt{n}n 个,即可以装入背包的商品数很小。考虑枚举正确的商品序列数。设 gi,jg_{i,j}gi,j 表示取了 iii 个这样的商品,最体积为 jjj 的方案数。显然不能直接枚举第 iii 个商品的体积。但是对于某个体积为 xxx 的商品 (x>n)(x \gt \sqrt{n})(x>n) ,都可以由体积为 n+1\sqrt{n}+1n+1 的商品不断扩大它的体积后得到(即体积不断 +1+1+1)。问题就转化成是否要取一个体积为 n+1\sqrt{n}+1n+1 的商品以及是否要将已取的所有商品体积 +1+1+1 。转移为:gi,j=gi−1,j−(n+1)+gi,j−ig_{i,j}=g_{i-1,j-(\sqrt{n}+1)}+ g_{i,j-i}gi,j=gi1,j(n+1)+gi,ji

这样复杂度均摊为 O(nn)O(n\sqrt{n})O(nn)

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+5,maxbk=320,mod=23333333;
ll f[maxn],g[maxbk][maxn],sum[maxn];
int main(){int n; cin>>n; int bk=sqrt(n);f[0]=1;for(int i=1;i<=bk;i++){for(int j=0;j<=n;j++){sum[j]=f[j];if(j>=i) (sum[j]+=sum[j-i])%=mod;}for(int j=0;j<=n;j++){if(j>=i*(i+1)) f[j]=(sum[j]-sum[j-i*(i+1)]+mod)%mod;else f[j]=sum[j];}}g[0][0]=1;ll ans=f[n];for(int i=1;i<=bk;i++)for(int j=i*(bk+1);j<=n;j++){g[i][j]=(g[i-1][j-(bk+1)]+g[i][j-i])%mod;(ans+=f[n-j]*g[i][j]%mod)%=mod;}cout<<ans;return 0;
}

分块

分块题常见操作

修改:

  1. 对序列 [l,r][l,r][l,r] 内的每个数 ±k± k±k
  2. etc

查询

  1. 求序列 [l,r][l,r][l,r] 的和;
  2. 求序列 [l,r][l,r][l,r]≤k\le kk≥k\ge kk<k\lt k<k>k\gt k>k 的数的个数;
  3. ect

教主的魔法

link
分块+排序后二分 ,板题。

http://www.lryc.cn/news/623451.html

相关文章:

  • 天地图应用篇: 增加缩放、比例尺控件
  • 24. 什么是不可变对象,好处是什么
  • 【Docker】搭建一款功能强大且免费的开源在线绘图工具 - draw.io
  • 云原生俱乐部-RH134知识点总结(2)
  • 62.不同路径
  • 【计算机网络面试】键入网址到网页显示期间,发生了什么?
  • 网络常识-DNS如何解析
  • 数据结构初阶(19)外排序·文件归并排序的实现
  • Ugit使用记录
  • 【自动化运维神器Ansible】template流程控制:for循环与if条件判断详解
  • Flink作业执行的第一步:DataFlow graph的构建
  • C11期作业18(07.12)
  • 栈与队列:数据结构中的双生子
  • 【JavaEE】多线程 -- 单例模式
  • [python学习记录2]变量
  • Maven 开发实践
  • PCA的一些实际应用
  • 详解flink java基础(一)
  • 前端项目的打包部署
  • 【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
  • Docker Compose 安装 Neo4j 的详细步骤
  • Docker之自定义jkd镜像上传阿里云
  • Docker+飞算JavaAI=未来:全流程容器化AI开发实战
  • 堆(Heap):高效的优先级队列实现
  • 适用监测农作物长势和病虫害的高光谱/多光谱相机有哪些?
  • 已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成
  • 【Virtual Globe 渲染技术笔记】8 顶点变换精度
  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • 6.Ansible自动化之-管理变量和事实