首页 > 其他分享 >P6189 [NOI Online #1 入门组] 跑步(分拆数)

P6189 [NOI Online #1 入门组] 跑步(分拆数)

时间:2024-10-21 17:44:31浏览次数:8  
标签:NOI int rep ans P6189 add maxn Online mod

简要题意

给你一个整数 \(n\),你需要求 \(\sum_{i=1}^n x_i=n\) 且 \(x_i\le x_{i+1}\) 的非负整数解数量对给定模数 \(p\) 取模后的结果。

\(n\le 10^5\)

分析

考虑一个显然的 DP:设 \(f_{i,j}\) 表示考虑 \(1\sim i\) 这些数,总和为 \(j\) 的方案数。转移是完全背包型转移:\(f_{i,j}=f_{i-1,j}+f_{i,j-i}\)。时间复杂度 \(O(n^2)\),飞了。

考虑优化。

注意到当取的数较大的时候,取的数不会太多。

考虑根号分治,设阈值 \(B=\sqrt n\),那么 \(>B\) 的数选的数的个数 \(\le B\)。设 \(g_{i,j}\) 表示选了 \(i\) 个数,选的数的和是 \(j\) 的方案数。我们在选数的时候,先固定选了 \(i\) 个 \(B\),然后每次考虑若要选更大的数,我们就给当前的数全局加 \(1\)。那么写成转移方程就是 \(g_{i,j}=g_{i-1,j-B}+g_{i,j-i}\)。结合暴力 DP 时间复杂度 \(O(n\sqrt n)\)。

int n,mod;
int f[maxm][maxn],g[maxm][maxn];
int F[maxn],G[maxn];
void add(int &x,int y){x+=y,x=x>=mod?x-mod:x;} 
void solve_the_problem(){
	rd(n),rd(mod);
	f[0][0]=1;
	rep(i,1,B-1)rep(j,0,n){
		add(f[i][j],f[i-1][j]);
		if(j>=i)add(f[i][j],f[i][j-i]);
	}
	rep(i,0,n)F[i]=f[B-1][i];
	g[0][0]=G[0]=1;
	rep(i,1,B)rep(j,0,n){
		if(j>=B)add(g[i][j],g[i-1][j-B]);
		if(j>=i)add(g[i][j],g[i][j-i]);
		add(G[j],g[i][j]);
	}
	int ans=0;
	rep(i,0,n)ans=(ans+1ll*F[i]*G[n-i]%mod)%mod;
	write(ans);
}

标签:NOI,int,rep,ans,P6189,add,maxn,Online,mod
From: https://www.cnblogs.com/dcytrl/p/18489868

相关文章

  • 【题解】Solution Set - NOIP2024集训Day57 字符串
    【题解】SolutionSet-NOIP2024集训Day57字符串https://www.becoder.com.cn/contest/5653「CF213E」TwoPermutations「CF961F」k-substrings「CF580E」KefaandWatch「CF504E」MishaandLCPonTree......
  • 2023 ICPC Seoul Regional A. Apricot Seeds(Pjudge【NOIP Round #7】冒泡排序)
    题意一个序列,Q次询问一个区间[l,r],进行k轮冒泡后,求子区间[x,y]的和。(N<=1e6,Q<=5e5)冒泡定义为:fori=1ton-1:ifa[i]>a[i+1]:swap(a[i],a[i+1])考场想法:经典转01。110111000111000111111011100011100011111+1011100011100011111+1101100......
  • 2024 Noip 做题记录(五)
    \(\text{ByDaiRuiChen007}\)Round#17-2024.10.8A.[ARC135D]SquareProblemLink题目大意给定\(n\timesm\)矩阵,每次操作可以把\(2\times2\)子矩形中的每个元素\(\pm1\),若干次操作后最小化所有元素的绝对值和,给出构造。数据范围:\(n,m\le500\)。思路分析......
  • CSP2024 前集训:多校A层冲刺NOIP2024模拟赛08
    前言先痛骂没良心出题人,T1\(n\sqrtn\)多大你刚好给多大,一点不多给,T2才是签到题,因为放了T2位置打了暴力就去想T3了,我是唐氏,谁让你T1、T2swap的?T3实则三道题。但是还是感觉T1更简单啊,\(5e4\)搁哪儿摆着呢一眼\(O(n\sqrtn)\),甚至空间也是这么多,太明显了。挂分挂......
  • 对于 CF,AT,CSP-S,NOIP,我想说
    尽管我是div2一题水平,但是......
  • 多校A层冲刺NOIP2024模拟赛09
    多校A层冲刺NOIP2024模拟赛09考试唐完了,T2、T4都挂了100分,人麻了。排列最小生成树给定一个\(1,2,\dots,n\)的排列\(p_1,p_2,\dots,p_n\)。构造一个\(n\)个点的完全无向图,节点编号分别是\(1,2,\dots,n\)。节点i和节点j之间的边边权为\(|pi−pj|×|i......
  • 2024 ICPC Asia Taiwan Online Programming Contest题解记录
    比赛链接:https://codeforces.com/gym/105383/problemA.AnimalFarm找个最大pig,然后所有比他小的其他种类生物一直加就好了#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllmod=1e9+7;llksm(llx,lly){ llans=1; while(y) { if(y&1)......
  • NOI大纲复健计划
    2.2.3数据结构1.线性结构【5】双端栈【5】双端队列【5】单调队列【6】优先队列【6】ST表(SparseTable)2.集合与森林【6】并查集【6】树的孩子兄弟表示法3.特殊树【6】二叉堆【6】树状数组【6】线段树【6】字典树(Trie树)【7】笛卡尔......
  • 信息学奥赛 1322:【例6.4】拦截导弹问题(Noip1999)
     代码:#include<bits/stdc++.h>usingnamespacestd;inta[100005];boola1[100005];intmain(){inti=1;while(cin>>a[i]){a1[i]=false;i++;}i--;intant=0,x=a[1],j=2,sum=1;a1[1]=true;......
  • P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
    Sol蒲公英题意基本相同,但是注意到空间限制62.5MB,显然不能用蒲公英的做法。考虑先把整块的答案算出来,然后把小块的部分补上去,显然大块可以预处理,小块可以直接暴力查询是否越界。代码很简单。Code#include<iostream>#include<iomanip>#include<cstdio>#include<vector>......