loj 6089 小 Y 的背包计数问题——分类进行的背包
题目:https://loj.ac/problem/6089
直接多重背包,加上分剩余类的前缀和还是n^2的。
但可发现当体积>sqrt(n)时,个数的限制形同虚设,且最多有sqrt(n)个物品。
所以体积<=sqrt(n)的物品多重背包,大于sqrt(n)的就变成最小值是sqrt(n)+1、最多有sqrt(n)个物品的方案数,可以用那种“整体+1 或 新增一列”的套路解决。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e5+,M=,mod=;
int n,m,f[][N],s[][N],g[][N],t[N],ans;
void upd(int &x){x-=(x>=mod?mod:);}
int main()
{
scanf("%d",&n); m=sqrt(n)+;
//printf("m=%d\n",m);
for(int j=;j<=n;j++) s[][j]=;
for(int i=,u=,v=;i<=m;i++,u=!u,v=!v)
for(int j=;j<=n;j++)
{
f[u][j]=s[v][j]-(j-i*(i+)>=?s[v][j-i*(i+)]:);//j-i*(i+1)!! not j-i*i-1
f[u][j]+=mod; upd(f[u][j]);
s[u][j]=f[u][j]+(j-(i+)>=?s[u][j-(i+)]:);
upd(s[u][j]);
//printf("f[%d][%d]=%d s[%d][%d]=%d\n",i,j,f[u][j],i,j,s[u][j]);
}
g[][]=; t[]=;
for(int i=,u=,v=;i<=m;i++,u=!u,v=!v)
for(int j=;j<=n;j++)
{
g[u][j]=(j-i>=?g[u][j-i]:)+(j-(m+)>=?g[v][j-(m+)]:);
upd(g[u][j]);
t[j]+=g[u][j]; upd(t[j]);
//printf("g[%d][%d]=%d t[%d]=%d\n",i,j,g[u][j],j,t[j]);
}
int d=(m&);
for(int j=;j<=n;j++)
ans+=(ll)f[d][j]*t[n-j]%mod,upd(ans);
printf("%d\n",ans);
return ;
}
loj 6089 小 Y 的背包计数问题——分类进行的背包的更多相关文章
- LOJ #6089. 小 Y 的背包计数问题
LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...
- LOJ#6089 小 Y 的背包计数问题 - DP精题
题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/ ...
- LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
题目:https://loj.ac/problem/6089 对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k ...
- [loj6089]小Y的背包计数问题
https://www.zybuluo.com/ysner/note/1285358 题面 小\(Y\)有一个大小为\(n\)的背包,并且小\(Y\)有\(n\)种物品. 对于第\(i\)种物品,共有 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- [LOJ#2324]「清华集训 2017」小Y和二叉树
[LOJ#2324]「清华集训 2017」小Y和二叉树 试题描述 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙 ...
- [LOJ#2323]「清华集训 2017」小Y和地铁
[LOJ#2323]「清华集训 2017」小Y和地铁 试题描述 小Y是一个爱好旅行的OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的 ...
- loj #2325. 「清华集训 2017」小Y和恐怖的奴隶主
#2325. 「清华集训 2017」小Y和恐怖的奴隶主 内存限制:256 MiB时间限制:2000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 "A fight? Co ...
随机推荐
- Android 虚化图片的方法
Android 虚化图片 模糊图片 图片毛玻璃效果. 效果如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaDNjNGxlbm92bw==/font/ ...
- 对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用-------------- 解决办法
ABLE_DEPRECATED' is defined [-Winvalid-pch] //usr/lib/libvtkIO.so.5.10:对‘TIFFReadDirectory@LIBTIFF_4 ...
- [jjzhu学java]之solr4.9同步mysql数据
Solr是一个高性能,採用Java5开发,基于Lucene的全文搜索server.同一时候对其进行了扩展,提供了比Lucene更为丰富的查询语言,同一时候实现了可配置.可扩展并对查询性能进行了优化,而 ...
- Tsung 初步介绍安装
tsung是erlang的一个开源的一个压力测试工具,可以测试包括HTTP, WebDAV, Mysql, PostgreSQL, LDAP, and XMPP/Jabber等服务器.针对 HTTP ...
- git for windows 无法结束node进程(windows下杀进程)
问题 windows 系统下,如果用CMD命令行启动node服务,Ctrl + C 即可结束命令 git bash 用起来比命令行方便,但是Ctrl + C 并不会结束node服务,再次启动会报如下错 ...
- 多媒体开发之---live555 分析客户端
live555的客服端流程:建立任务计划对象--建立环境对象--处理用户输入的参数(RTSP地址)--创建RTSPClient实例--发出DESCRIBE--发出SETUP--发出PLAY--进入Lo ...
- oracle 存储过程(1)
说明 创建一个存储过程与编写一个普通的PL/SQL程序快有很多相似地方,比如:包括生命部分,执行部分和异常部分.但是两者之间实现细节还是有很多差别的,比如:创建存储过程需要使用procedure关键字 ...
- Loadrunner - Controller - policy - 设置集合点策略
控制器中设置集合点策略 我们在Virtual User Generator 中回放脚本无法 ...
- 搭建SVN服务器详细教程
搭建SVN服务器详细教程 本教程会从最基本的下载安装到上传代码,下载代码这条线来详细讲述如何完成SVN服务器的搭建 下载并安装VisualSVN server 下载并安装TortoiseSVN 导入项 ...
- 九度OJ 1028:继续畅通工程 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3140 解决:1338 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...