LOJ6089 小Y的背包计数问题 背包、根号分治
题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模。$N \leq 10^5$
$23333333=17 \times 1372549$竟然不是质数性质太不优秀了(雾
直接跑背包$O(N^2)$,于是咱们考虑挖掘性质、分开计算
发现当$i < \sqrt{N}$时就是一个多重背包,用单调队列优化到$O(N \sqrt{N})$
而当$i \geq \sqrt{N}$时,选中物品的数量不会超过$\sqrt{N}$,又因为最小的物品大小为$\sqrt{N}$,所以我们可以设计一个DP:
设$dp_{i,j}$为放了$i$个物品,其中物品总重量为$j$时的方案总数,有
$$dp_{i,j}=dp_{i-1,j-\sqrt{N}}+dp_{i,j-i}$$
也就是两种转移:①多加一个$\sqrt{N}$②给所有物品$+1$
总复杂度为$O(N\sqrt{N})$
#include<bits/stdc++.h>
#define MOD 23333333
#define MAXN 100001
using namespace std;
} , g[][MAXN] = {} , allG[MAXN] = {};
int main(){
, dir = ;
cin >> N;
T = sqrt(N);
; i <= T ; i++)
; j < i ; j++){
, t = N / i * i + j;
if(t > N)
t -= i;
int now = t;
; k <= i && t >= ; k++){
sum = (sum + f[t]) % MOD;
t -= i;
}
){
int q = f[now];
f[now] = sum;
sum = (sum - q + MOD) % MOD;
now -= i;
){
sum = (sum + f[t]) % MOD;
t -= i;
}
}
}
; i <= T ; i++){
dir ^= ;
memset(g[dir] , , sizeof(g[dir]));
; j <= N ; j++){
g[dir][j] = (g[dir ^ ][j - (T + )] + g[dir][j - i]) % MOD;
allG[j] = (allG[j] + g[dir][j]) % MOD;
}
}
; i <= N ; i++)
ans = (ans + (long long)allG[i] * f[N - i]) % MOD;
cout << ans;
;
}
LOJ6089 小Y的背包计数问题 背包、根号分治的更多相关文章
- LOJ6089 小Y的背包计数问题(根号优化背包)
Solutioon 这道题利用根号分治可以把复杂度降到n根号n级别. 我们发现当物品体积大与根号n时,就是一个完全背包,换句话说就是没有了个数限制. 进一步我们发现,这个背包最多只能放根号n个物品. ...
- [loj6089]小Y的背包计数问题
https://www.zybuluo.com/ysner/note/1285358 题面 小\(Y\)有一个大小为\(n\)的背包,并且小\(Y\)有\(n\)种物品. 对于第\(i\)种物品,共有 ...
- loj6089 小 Y 的背包计数问题
link 吐槽: 好吧开学了果然忙得要死……不过为了证明我的blog还没有凉,还是跑来更一波水题 题意: 有n种物品,第i种体积为i,问装满一个大小为n的背包有多少种方案? $n\leq 10^5.$ ...
- LOJ6089 小Y的背包计数问题 背包
正解:背包 解题报告: 先放传送门! 好烦昂感觉真的欠下一堆,,,高级数据结构知识点什么的都不会,基础又麻油打扎实NOIp前的题单什么的都还麻油刷完,,,就很难过,,,哭辣QAQ 不说辣看这题QwQ! ...
- 51nod 1597 有限背包计数问题 (背包 分块)
题意 题目链接 Sol 不会做啊AAA.. 暴力上肯定是不行的,考虑根号分组 设\(m = \sqrt{n}\) 对于前\(m\)个直接暴力,利用单调队列优化多重背包的思想,按\(\% i\)分组一下 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- LOJ #6089. 小 Y 的背包计数问题
LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...
- 洛谷 P6189 - [NOI Online #1 入门组]跑步(根号分治+背包)
题面传送门 题意: 求有多少个数列 \(x\) 满足: \(\sum x_i=n\) \(x_i\geq x_{i+1}\) 答案对 \(p\) 取模. ...你确定这叫"入门"组 ...
- 题解 51nod 1597 有限背包计数问题
题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \( ...
随机推荐
- Tomcat 8默认工具manager管理页面访问配置
Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相 ...
- Linux 下Shell变量,环境变量的联系与区别
Linux下Shell变量,环境变量的联系与区别 by:授客 QQ:1033553122 1. 简介 linux下的变量可分成两种:Shell变量和环境变量. Shell变量,又称本地变量,包括私有 ...
- html基本标签(慕课网)
html标签: 1.<q>标签,短文本引用(quote,引用) 注解:引用短文本,比如引用古人的一句话 ,注意引用的文本不需要再加双引号. <q>标签的真正关键点不是它的默认样 ...
- Fiddler抓包使用教程-过滤
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72929800 本文出自[赵彦军的博客] Fiddler抓包可以完成我们移动开发者的 ...
- 将 Azure VM 迁移到 Azure 中的托管磁盘
Azure 托管磁盘无需单独管理存储帐户,从而简化了存储管理. 还可以将现有的 Azure VM 迁移到托管磁盘,以便受益于可用性集中 VM 的更佳可靠性. 它可确保可用性集中不同 VM 的磁盘完全相 ...
- 峰值QPS/QPS/PV/UV/服务器数量/并发数/吐吞量/响应时间计算公式
QPS:每秒查询率(Query Per Second) ,每秒的响应请求数,也即是最大吞吐能力.QPS = req/sec = 请求数/秒QPS统计方式 [一般使用 http_load 进行统计]QP ...
- tkinter学习系列(四)之Button 控件
目录 目录 前言 (一)基本用法和可选属性 ==1.基本用法== ==2.可选属性== (二)属性的具体实现和案例 ==1.常用属性== ==案例一== ==2.按钮里的图片== ==案例二== == ...
- python之列表的常用操作
Python list 常用方法总结 一,创建列表 只要把逗号分隔的不同的数据项使用方括号([ ])括起来即可 下标(角标,索引)从0开始,最后一个元素的下标可以写-1 list = ['1 ...
- Hive-1.2.1_02_简单操作与访问方式
1. Hive默认显示当前使用库 .需要用时,即时配置,在cli执行属性设置,这种配置方式,当重新打开cli时,就会生效: hive> set hive.cli.print.current.db ...
- JQuery 获取多个select标签option的text内容
根据option的id属性,修改text值 $("#sel_div .select_class option[id='-选择省-']").text(data.province).a ...