题意

题目链接

Sol

不会做啊AAA。。

暴力上肯定是不行的,考虑根号分组

设\(m = \sqrt{n}\)

对于前\(m\)个直接暴力,利用单调队列优化多重背包的思想,按\(\% i\)分组一下。复杂度\(O(n\sqrt{n})\)

对于后\(m\)个,此时每个物品没有个数的限制,换一种dp方法

设\(g[i][j]\)表示用了\(i\)物品,大小为\(j\)的方案数。

转移的时候有两种方案

  1. 把当前所有物品大小\(+1\),\(g[i][j + i] += g[i][j]\)

  2. 新加入一个最小的物品, \(g[i + 1][j + m + 1] += g[i][j]\)

看上去很显然,但自己想不出来qwq

#include<cstdio>
#include<cmath>
#include<cstring>
#define pt(x) printf("%d\n", x);
using namespace std;
const int MAXN = 1e5 + 10, mod = 23333333;
int N, M, f[81][MAXN], g[81][MAXN];
int add(int x, int y) {
return (x + y >= mod) ? (x + y - mod): x + y;
}
int main() {
scanf("%d", &N);
M = sqrt(N); /*f[0][0] = 1; int o = 1;
for(int i = 1; i <= M; i++) {
for(int k = 0; k < i; k++) {//res
int s = 0;
for(int t = 0; i * t + k <= N; t++) {//num
s = add(s, f[i - 1][k + t * i]);
f[i][k + t * i] = s;
if(t >= i) s = (s - f[i - 1][(t - i) * i + k] + mod) % mod;//over take
}
}
}
int ans = f[M][N]; pt(ans) g[0][0] = 1; int p = 0; for(int i = 1; i <= M; i++) {// used i goods
for(int j = 0; j <= N; j++) {// length is j
if(j >= M + 1) g[i][j] = g[i - 1][j - (M + 1)];
if(j >= i) g[i][j] = add(g[i][j], g[i][j - i]);
}
for(int j = 0; j <= N; j++) (ans += 1ll * f[M][j] * g[i][N - j] % mod) %= mod;
}
printf("%d", ans);*/ f[0][0] = 1; int o = 1;
for(int i = 1; i <= M; i++, o ^= 1) {
memset(f[o], 0, sizeof(f[o]));
for(int k = 0; k < i; k++) {//res
int s = 0;
for(int t = 0; i * t + k <= N; t++) {//num
s = add(s, f[o ^ 1][k + t * i]);
f[o][k + t * i] = s;
if(t >= i) s = (s - f[o ^ 1][(t - i) * i + k] + mod) % mod;//over take
}
}
}
int ans = f[o ^ 1][N], tmp = o ^ 1; pt(ans)
g[0][0] = 1; o = 1;
for(int i = 1; i <= M; i++, o ^= 1) {// used i goods
memset(g[o], 0, sizeof(g[o]));
for(int j = 0; j <= N; j++) {// length is j
if(j >= M + 1) g[o][j] = g[o ^ 1][j - (M + 1)];
if(j >= i) g[o][j] = add(g[o][j], g[o][j - i]);
}
for(int j = 0; j <= N; j++) (ans += 1ll * f[tmp][j] * g[o][N - j] % mod) %= mod;
}
printf("%d", ans);
return 0;
}

51nod 1597 有限背包计数问题 (背包 分块)的更多相关文章

  1. 题解 51nod 1597 有限背包计数问题

    题目传送门 题目大意 给出 \(n\),第 \(i\) 个数有 \(i\) 个,问凑出 \(n\) 的方案数. \(n\le 10^5\) 思路 呜呜呜,傻掉了... 首先想到根号分治,分别考虑 \( ...

  2. LOJ6089 小Y的背包计数问题 背包、根号分治

    题目传送门 题意:给出$N$表示背包容量,且会给出$N$种物品,第$i$个物品大小为$i$,数量也为$i$,求装满这个背包的方案数,对$23333333$取模.$N \leq 10^5$ $23333 ...

  3. LOJ6089 小Y的背包计数问题 背包

    正解:背包 解题报告: 先放传送门! 好烦昂感觉真的欠下一堆,,,高级数据结构知识点什么的都不会,基础又麻油打扎实NOIp前的题单什么的都还麻油刷完,,,就很难过,,,哭辣QAQ 不说辣看这题QwQ! ...

  4. LOJ #6089. 小 Y 的背包计数问题

    LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...

  5. 【LOJ6089】小Y的背包计数问题(动态规划)

    [LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...

  6. POJ 3260 多重背包+完全背包

    前几天刚回到家却发现家里没网线 && 路由器都被带走了,无奈之下只好铤而走险尝试蹭隔壁家的WiFi,不试不知道,一试吓一跳,用个手机软件简简单单就连上了,然后在浏览器输入192.168 ...

  7. 【poj3260-最少找零】多重背包+完全背包

    多重背包+完全背包. 买家:多重背包:售货员:完全背包: 开两个数组,分别计算出买家,售货员每个面额的最少张数. 最重要的是上界的处理:上界为maxw*maxw+m(maxw最大面额的纸币). (网上 ...

  8. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  9. 背包!背包!HDU 2602 Bone Collector + HDU 1114 Piggy-Bank + HDU 2191 512

    http://acm.hdu.edu.cn/showproblem.php?pid=2602 第一题 01背包问题 http://acm.hdu.edu.cn/showproblem.php?pid= ...

随机推荐

  1. MySQL5.7配置(第一次使用)

    MySQL5.7配置(第一次使用) 最近因为工作需要学习mysql的增删改查.用的公司的电脑,之前有人已经安装过mysql5.7,等于使用了免安装版,重新开始配置.参考了以下文章 http://blo ...

  2. 老男孩Day13作业:ORM学员管理系统

    一.作业需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图: 管理班级,可创建班级,根据学员qq号把学员加入班级      可创建指定班级的上课纪录,注意一节上 ...

  3. 使用SWig出现调用异常的情况

    未经处理的异常:  System.TypeInitializationException: "Win32Project1PINVOKE"的 类型初始值设定项引发异常. ---> ...

  4. js自定义对象 (转)

    原文地址:https://sjolzy.cn/js-custom-object.html 29 March 2010 9:53 Monday by 小屋 javascript进阶之对象篇 一,概述 在 ...

  5. 精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能)

    原文:精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能) 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提 ...

  6. 吴裕雄 python 机器学习——密度聚类DBSCAN模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  7. Jmeter拓展插件可查看和lr一样的图形结果

    利用插件可通过图形直观查看CPU.Memory等的运行情况 1. JmeterPlugins.jar插件下载地址:http://jmeter-plugins.org/downloads/all 下载并 ...

  8. A - TOYS(POJ - 2318) 计算几何的一道基础题

    Calculate the number of toys that land in each bin of a partitioned toy box. 计算每一个玩具箱里面玩具的数量 Mom and ...

  9. [转] git忽略已经被提交的文件

    [From] https://segmentfault.com/q/1010000000430426 正确的做法应该是:git rm --cached logs/xx.log,然后更新 .gitign ...

  10. python3.6从含有html代码的json的中取出某个值

    python3.6从含有html代码的json的中取出某个值 之前在做接口测试的时候,网站的后端是用java写的,然后接口的response返回的都是json格式,json很简单,就是字典,类似这样子 ...