[背包DP || 多项式] 51Nod 1597 有限背包计数问题
来源:互联网 发布:淘宝商品管理 编辑:程序博客网 时间:2024/06/06 02:49
这是个多重背包 直接做肯定接受不了时间复杂度
我们看当体积大于
但还是接受不了复杂度 再观察 体积大的总共只可能取
令
这样转移 每次全部加1 或者新加入一个
体积小的嘛 总共根号种 前缀和转一下 是可以做到
总复杂度
#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;const int P=23333333;const int N=100005;int n,m;int f[2][N];int F1[N],F2[N];#define F(x) (x<0?0:f[t][x])int main(){ freopen("t.in","r",stdin); freopen("t.out","w",stdout); scanf("%d",&n); m=sqrt(n); int t; f[t=0][0]=1; for (int i=1;i<=m;i++,t^=1){ for (int j=0;j<=n;j++) (f[t][j]+=F(j-i))%=P; for (int j=0;j<=n;j++) f[t^1][j]=(F(j)+P-F(j-(i+1)*i))%P; } for (int i=0;i<=n;i++) F1[i]=f[t][i]; f[t=0][0]=1; for (int i=1;i<=n;i++) f[t][i]=0; F2[0]=1; for (int i=1;i<=m;i++,t^=1) for (int j=0;j<=n;j++){ f[t^1][j]=((j>=i?f[t^1][j-i]:0)+F(j-m-1))%P; (F2[j]+=f[t^1][j])%=P; } ll ans=0; for (int i=0;i<=n;i++) ans+=(ll)F1[i]*F2[n-i]%P; printf("%lld\n",ans%P); return 0;}
这个我们再喂给OEIS 又找到辣
然后知道了生成函数就可以大力一发科技
大佬的题解 orzz
0 0
- [背包DP || 多项式] 51Nod 1597 有限背包计数问题
- 51nod 1597 有限背包计数问题 dp
- [DP] 51Nod 1597 有限背包计数问题
- [DP]51 Nod 1597——有限背包计数问题
- 51nod 1597 有限背包计数问题[dp][阈值]
- 51nod 1597 有限背包计数问题
- 51Nod-1597-有限背包计数问题
- 【背包+阈值优化】51Nod 1597 有限背包计数问题
- [背包DP][小技巧] LOJ#6089. 小 Y 的背包计数问题 && 51NOD 1597 有限背包计数问题
- 【51nod1597】【DP】有限背包计数问题
- 1597 有限背包计数问题
- 有限背包计数问题 (分类dp)
- 有限背包计数问题
- 51nod 1201[整数划分] 1259[整数划分V2] 1597 [有限背包计数问题]
- 51nod1597 有限背包计数问题
- [51nod1597] 有限背包计数问题
- 【阈值优化+背包】51Nod1597[有限背包计数问题]题解
- 51nod1597 有限背包计数问题[DP][分类讨论][前缀和]
- 救基友记2
- (C语言)高精度减法
- 17滴滴春招大题
- Sass入门(一)
- 51nod_1002_数塔取数问题
- [背包DP || 多项式] 51Nod 1597 有限背包计数问题
- 枚举算法
- web2——景点主页
- 交叉验证(cross_validation)
- POJ 1029 False coin 笔记 模拟
- dfs-hdu2782
- Spring Boot集成CKFinder-优化
- 剑指offer--面试题13:在O(1)时间删除链表结点
- HTTP协议之基本认证