51Nod 有限背包计数问题 题解报告
首先这道题理论上是可以做到O(nlogn)的,因为OEIS上有一个明显可以用多项式乘法加速的式子
但是由于模数不是很兹磁,所以导致nlogn很难写
在这里说一下O(n*sqrt(n))的做法
首先我们很容易发现当物品的大小>sqrt(n)的时候,物品数量的限制形同虚设
也就是说物品的大小>sqrt(n)的时候实际上是一个完全背包
而对于完全背包,有着另外一种做法(参照NOIP2001 数的划分)
由于我们知道假设我们只用>sqrt(n)的物品,我们最多使用sqrt(n)个物品
不妨设f[i][j]表示用了i个>sqrt(n)的物品拼出来j的方案
我们分类讨论:
1、这i个物品中至少有一个是sqrt(n)+1
2、这i个物品都>sqrt(n)+1
可以很容易得到递推式f[i][j]=f[i][j-i]+f[i-1][j-sqrt(n)-1]
由于最多用sqrt(n)个物品,所以状态数是n*sqrt(n)的,转移是O(1)的
所以这部分的时间复杂度是O(n*sqrt(n))的
之后我们考虑只用<=sqrt(n)的情况
这显然是一个简单的多重背包问题了
我们都知道多重背包问题的时间复杂度是O(物品数量*背包大小)
所以时间复杂度是O(n*sqrt(n))
之后把合并两种情况就可以了,时间复杂度O(n*sqrt(n))
好啦,这道题的上半部分几乎是NOIP2001 数的划分
下半部分是裸的多重背包
所以整体是NOIP难度,而我在做51Nod的时候并没有想出来
所以我的水平低于NOIP
证毕QAQ
顺便一提的是,最后合并的式子是一个卷积形式
51Nod 有限背包计数问题 题解报告的更多相关文章
- 题解 51nod 1597 有限背包计数问题
题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \( ...
- 51nod 1597 有限背包计数问题 (背包 分块)
题意 题目链接 Sol 不会做啊AAA.. 暴力上肯定是不行的,考虑根号分组 设\(m = \sqrt{n}\) 对于前\(m\)个直接暴力,利用单调队列优化多重背包的思想,按\(\% i\)分组一下 ...
- 51Nod1957 有限背包计数问题
传送门 另一个传送门 这题还挺有意思…… 先贴一波出题人的题解…… (啥你说你看不见?看来你还没过啊,等着A了再看或者乖乖花点头盾好了……) 然后是我的做法……思想都是一样的,只是细节不一样而已…… ...
- [51nod1597]有限背包计数问题
你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少 两种方案不同当且仅当存在至少一个数i满足第i种物品使用的数量不同 Input 第一行一个正整数n 1 ...
- 2018.09.25 51nod1597 有限背包计数问题(背包+前缀和优化)
传送门 dp好题. 我认为原题的描述已经很清楚了: 你有一个大小为n的背包,你有n种物品,第i种物品的大小为i,且有i个,求装满这个背包的方案数有多少. 两种方案不同当且仅当存在至少一个数i满足第i种 ...
- cojs 二分图计数问题1-3 题解报告
OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
随机推荐
- 合并大量txt文件的内容
首先熟悉一个dos命令 显示文件内容命令——type命令 1.格式:type [盘符:] [路径] 文件名 2.类型:内部命令 3.功能:把指定的文件内容在屏幕上显示或打印机输出,它常用作查阅和显示文 ...
- Linux mkisofs 创建光盘镜像文件(Linux指令学习笔记)
mkisofs命令 创建光盘文件的系统的命令是mkisofs.光盘系统有多种格式,利用Linux系统提供的光盘文件系统创建 命令mkisofs,可以创建多种iso9660文件系统. 我们一般不用mki ...
- Entity Framework Code First 常用方法集成
using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using S ...
- WIN2003跳出res://C:WINDOWSsystem32mys.dll/mys.hta解决方法
出现这个问题的时候 @echo off 请将以下语句复制到记事本中,另存为后缀为.cmd的文件,并运行.当然在命令行下一句句运行也没问题. echo 正在修复,这个过程可能需要几分钟,请稍候…… ru ...
- 简单的jQuery获取URL的?后带的参数
var con_name = getQueryString("con_name"); //接收con_name function getQueryString(val ...
- protobuf编译报错
在下载protobuf进行编译的时候会出现如图所示的错误 修改 C:\protobuf-2.4.1\gtest\include\gtest\internal\gtest-tuple.h(C:是我解压p ...
- centos系统下安装使用composer教程
Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "packages" ...
- Python脚本控制的WebDriver 常用操作 <十五> 处理Navigation Bar
下面将使用WebDriver来模拟操作:选择一个Navigation bar的选项 测试用例场景 Navigation Bar可以看作是简单的类似于tab的导航栏.一般来说导航栏都是ul+li.先定位 ...
- 爱重启的windows,伤不起
.
- RaddioButton控件
<GroupBox Margin="5"> <StackPanel> <RadioButton IsChecked="true"& ...