题解:

考虑根号分治。
对于体积≤n\le\sqrt n≤n​的东西,发现背包可以用一个前缀和优化。
对于体积>n>\sqrt n>n​的东西,实际上每个物品都可以看做有无限个 ,就是求把某个数分成若干份,每份都至少为n+1\sqrt n+1n​+1的方案数,由于分成的份数不会超过n\sqrt nn​,所以用一个简单的DP就行了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pa pair<int,int>
const int Maxn=100010;
const int inf=2147483647;
const int mod=23333333;
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return x*f;
}
int n,f[Maxn],g[2][Maxn],s[Maxn],ff[Maxn];
void upd(int &x,int y){x+=y;if(x>=mod)x-=mod;}
int main()
{memset(ff,0,sizeof(ff));memset(f,0,sizeof(f));n=read();int m=(int)sqrt(n);f[0]=1;for(int i=0;i<=n;i++)s[i]=1;for(int i=1;i<=m;i++){for(int j=n;j>=i;j--){int k=min(i,j/i);upd(f[j],(s[j-i]-((j-(k+1)*i>=0)?s[j-(k+1)*i]:0)+mod)%mod);}s[0]=1;for(int j=1;j<=n;j++)s[j]=(f[j]+((j>=i+1)?s[j-(i+1)]:0))%mod;}int now=0,ans=0;memset(g[now],0,sizeof(now));g[0][0]=1;for(int i=1;i<=m;i++){now^=1;memset(g[now],0,sizeof(g[now]));for(int j=i;j<=n-m*i;j++){upd(g[now][j],g[now^1][j-1]),upd(g[now][j],g[now][j-i]);upd(ans,(LL)g[now][j]*f[n-i*m-j]%mod);}}upd(ans,f[n]);printf("%d",ans);
}

51nod 1597 有限背包计数问题 DP 根号分治相关推荐

  1. nowcoder 79F 小H和圣诞树 换根 DP + 根号分治

    设节点个数大于 $\sqrt n$ 的颜色为关键颜色,那么可以证明关键颜色最多有 $\sqrt n$ 个. 对于每个关键颜色,暴力预处理出该颜色到查询中另一个颜色的距离和. 对于不是关键颜色的询问,直 ...

  2. LOJ#6089 小 Y 的背包计数问题 - DP精题

    题面 题解 (本篇文章深度剖析,若想尽快做出题的看官可以参考知名博主某C202044zxy的这篇题解:https://blog.csdn.net/C202044zxy/article/details/ ...

  3. Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

    传送门 题意: 有一颗nnn个节点的树,其中一个简单路径集合被称为kkk合法当且仅当: 树的每个节点至多属于一条路径,且每条路径恰好包含kkk个点. 对于k∈[1,n]k\in [1,n]k∈[1,n ...

  4. 【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】

    题意:给一棵 nnn 个点的树,每个点有个字符,另给一个长度为 mmm 的特征串,求树上 n2n^2n2 条有向路径在特征串中出现的次数之和. n,m≤5×104n,m\leq 5\times 10^ ...

  5. 【UOJ549】序列妙妙值【异或】【根号分治】

    题意:给一个长度为nnn的序列aaa,将其分成kkk段,不能为空,求所有段的异或和之和的最小值. n≤6×104,ai<216,k≤8n\leq 6\times 10^4,a_i <2^{ ...

  6. 【学习笔记】无向图、有向图的三元环、四元环计数问题(根号分支+bitset)

    三元环计数和四元环计数问题 无向图三元环计数问题 根号分治 bitset 无向图四元环计数问题 有向图三四元环计数问题 无向图三元环计数问题 根号分治 记 di:id_i:idi​:i 在原图中的度数 ...

  7. LOJ #2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    这道题的数据范围中有两个需要注意到的点: 1. 边都是由编号小的点连向编号大的点. 2. 总点数只有 $10^5$ 个. 所以我们可以考虑采取根号分治的做法: 对于点数大于 $\sqrt n$ 的部分 ...

  8. [LOJ]#2838. 「JOISC 2018 Day 3」比太郎的聚会 根号分治

    Solution 以后不会做题还是要考虑根号分治啊-- 对于给出点数≥n\ge\sqrt n≥n​,直接O(n)O(n)O(n)DP: 对于给出点数<n<\sqrt n<n​,可以预 ...

  9. 学习计划——根号分治

    根号分治 根号分治是一种思想,一般根据一个数(可以是数组的数,也可以是答案的数)分类,分为大于 s q r t ( n ) sqrt(n) sqrt(n)的部分和小于等于 s q r t ( n ) ...

最新文章

  1. yolov3深度解析
  2. sql server 连接工具_SQL on file 工具
  3. 学phython的小笔记
  4. Android SDK 中文 (56) —— ViewFlipper
  5. c# 多线程界面卡顿_C#多线程解决界面卡死问题的完美解决方案
  6. 单点登录SSO的实现原理与方案详解
  7. php的登陆代码,PHP登陆页面完整代码
  8. Openstack学习笔记(十五)-Horizon源代码学习笔记(五)
  9. Nero刻录软件下载
  10. python取字母以及数字随机数
  11. 如何使用图片自定义和装饰您的QR码
  12. 网易2011笔试题详解
  13. AVPlayer 播放的时候有黑色边
  14. 城市路(信息学奥赛一本通 - T1381)
  15. 28、完美的RestApi
  16. Centos中Samba共享目录无法访问
  17. [数据库] 一文读懂Mysql数据库索引实现原理
  18. [每天读一点英文:那些给我勇气的句子] alone but not lonely
  19. 盘点2010年IT业界十大囧事 iPhone居首
  20. 万向球头的锁紧结构图_1000吨大型多功能结构试验系统

热门文章

  1. 趣闻——bug的由来
  2. clobber和glob
  3. VSCode-解决更新代码时报would clobber existing tag
  4. 重构之美-浴火重生的火凤凰CSS3【前传:Gradient】
  5. 如何查看网站的收录与排名
  6. Selenium自动化测试入门(基于Python)
  7. DS18B20温度转换与显示
  8. 战舰世界闪击战游戏攻略
  9. 英文版Windows XP的中文支持设置
  10. [回顾]2007年木马病毒“英雄榜”,你中过几个