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 逐帧动画( Drawable 动画),这一篇就够了
前言 作为 Android 最常见的两种动画形式,逐帧动画( Drawable 动画),有着极其广泛的应用,它的原理与早起的电影以及 GIF 类似,就是把一张的图,按顺序快速切换,这样一来看上去就好像 ...
- 基于Python的安卓图形锁破解程序
安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不 ...
- PHP下最好用的富文本HTML过滤器:HTMLPurifier使用教程
HTMLPurifier是我目前用过最好的PHP富文本HTML过滤器了,采用了白名单机制,有效杜绝了用户提交表单中的非法HTML标签,从而可以防止XSS攻击! HTMLPurifier项目地址:htt ...
- Visual Studio 2017 for Mac Preview
Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo 目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4 ...
- iis出现HTTP 错误 403.14 - Forbidden Web问题
找到"目录浏览",并"应用"
- opensearch空查询
query子句不支持为空的查询,可以使用filter子句:filter=area="" 或者 filter=filedlen(area)=0 可以使用相关性函数实现:https ...
- ScrollView分析
本文转载至 http://blog.sina.com.cn/s/blog_a843a8850101dsg5.html Properties alwaysBounceHorizontal ...
- Flask,ORM及模板引擎Jinja2
跨域:http://blog.csdn.net/yannanxiu/article/details/53036508 下载flask_cors包 pip install flask-cors 使用fl ...
- 【BZOJ4167】永远的竹笋采摘 分块+树状数组
[BZOJ4167]永远的竹笋采摘 题解:我们考虑有多少点对(a,b)满足a与b的差值是[a,b]中最小的.以为是随机数据,这样的点对数目可能很少,实测是O(n)级别的,那么我们已知了有这么多可能对答 ...
- ZOJ 3502 Contest <状态压缩 概率 DP>
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3502 #include <iostream> #incl ...