LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP
题目:https://loj.ac/problem/6089
对于 i <= √n ,设 f[i][j] 表示前 i 种,体积为 j 的方案数,那么 f[i][j] = ∑(1 <= k <= i ) f[i-1][j - k*i]
可以用前缀和优化,因为第 i 次只会用到间隔为 i 的和;
对于 i > √n ,最多选 √n 个,所以设 g[i][j] 表示用 i 个,体积为 j 的方案数;
每种方案如果排一个序,就是一个最小值为 √n + 1 的不降序列,所以算出不降序列的个数也就知道了方案数;
要得到一个长度为 i 的这样的序列,可以通过两种操作从 i - 1 的序列得到,即新加一个 √n + 1,或整体 + 1;
二者合并起来就是答案;
调了一下午,就是因为 f[] 数组开成 √n 大小了?为什么没有段错误提示??
会写前缀和优化DP啦...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
int const maxn=1e5+,maxm=,mod=;
int n,f[maxn],g[maxm][maxn],s[maxn],t[maxn],ans;
int main()
{
scanf("%d",&n); int sq=sqrt(n);
f[]=;
for(int i=;i<=sq;i++)
{
for(int j=;j<=n;j++)s[j]=(f[j]+(j>=i?s[j-i]:))%mod;
for(int j=;j<=n;j++)
{
f[j]=s[j];
if(j>=(i+)*i)f[j]=(f[j]-s[j-(i+)*i]+mod)%mod;
}
}
g[][]=;
ans=f[n];//
for(int i=;i<=sq;i++)
for(int j=i*(sq+);j<=n;j++)//i*
{
g[i][j]=(g[i-][j-sq-]+g[i][j-i])%mod;
ans=(ans+(ll)g[i][j]*f[n-j]%mod)%mod;
}
printf("%d\n",ans);
return ;
}
LOJ 6089 小Y的背包计数问题 —— 前缀和优化DP的更多相关文章
- 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 的背包计数问题——分类进行的背包
题目:https://loj.ac/problem/6089 直接多重背包,加上分剩余类的前缀和还是n^2的. 但可发现当体积>sqrt(n)时,个数的限制形同虚设,且最多有sqrt(n)个物品 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- [loj6089]小Y的背包计数问题
https://www.zybuluo.com/ysner/note/1285358 题面 小\(Y\)有一个大小为\(n\)的背包,并且小\(Y\)有\(n\)种物品. 对于第\(i\)种物品,共有 ...
- LOJ6089 小Y的背包计数问题 背包
正解:背包 解题报告: 先放传送门! 好烦昂感觉真的欠下一堆,,,高级数据结构知识点什么的都不会,基础又麻油打扎实NOIp前的题单什么的都还麻油刷完,,,就很难过,,,哭辣QAQ 不说辣看这题QwQ! ...
- loj6089 小 Y 的背包计数问题
link 吐槽: 好吧开学了果然忙得要死……不过为了证明我的blog还没有凉,还是跑来更一波水题 题意: 有n种物品,第i种体积为i,问装满一个大小为n的背包有多少种方案? $n\leq 10^5.$ ...
- LOJ6089 小Y的背包计数问题(根号优化背包)
Solutioon 这道题利用根号分治可以把复杂度降到n根号n级别. 我们发现当物品体积大与根号n时,就是一个完全背包,换句话说就是没有了个数限制. 进一步我们发现,这个背包最多只能放根号n个物品. ...
- LOJ6089 小Y的背包计数问题 背包、根号分治
题目传送门 题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模.$N \leq 10^5$ $23333 ...
随机推荐
- python3 监控代码变化 自动重启 提高开发效率
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'Michael Liao' import os, sys, time, sub ...
- TensorFlow2-维度变换
目录 TensorFlow2-维度变换 Outline(大纲) 图片视图 First Reshape(重塑视图) Second Reshape(恢复视图) Transpose(转置) Expand_d ...
- UVa 11998 破碎的键盘(数组实现链表)
题意: 输入一行字符,其中包含'[' 和 ‘]’, 意思为键盘上的home 和 end 键, 然后模拟字符在键盘上输入. 输入一行最终的结果 分析: 用数组模拟一个链表, 在链表的头尾插入字母然后输出 ...
- Java面向对象学习-----类的成员变量
类的成员变量: 猜数字游戏:一个类A有一个成员变量v,通过随机产生一个100内的整数给v赋值.定义一个方法,对A类的成员变量v进行猜. 没有猜对的情况下提示如果大了则提示大了,小了则提示小了,并且 ...
- Linux下汇编语言学习笔记27 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- Meeting 加虚拟边
Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated his fence ...
- 【进击后端】mongodb入门
环境:ubuntu 重要字:数据库,集合,记录,字段 api地址:https://docs.mongodb.com/manual/reference/method/db.collection.upda ...
- codevs——1275 有鱼的声音
1275 有鱼的声音 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Des ...
- Linux下重启加载命令
nginx -s reload
- linux复制文件/移动文件从一个文件夹到另一个文件夹
cp ~/baidu/* ~/zhidao/cp -r逐层复制mv /data/link /usr/local 移动文件夹 解决方法 1.在cp命令后,加一个选项 -r . cp -r /TEST/ ...