bzoj 3612 [Heoi2014]平衡——整数划分(dp)
Posted narh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 3612 [Heoi2014]平衡——整数划分(dp)相关的知识,希望对你有一定的参考价值。
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3612
因为力矩的缘故,变成了整数划分。
学习到了整数划分。就是那个图一样的套路。https://blog.csdn.net/Vmurder/article/details/42551603
注意各种边界。
注意输出换行。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=90005; int T,n,k,p,dp[N][15],ans; int main() { scanf("%d",&T); while(T--) { memset(dp,0,sizeof dp);ans=0;dp[0][0]=1; scanf("%d%d%d",&n,&k,&p);int lm=n*(k-1); for(int i=1;i<=lm;i++) for(int j=1;j<=k;j++) { if(i>=j)(dp[i][j]+=dp[i-j][j]+dp[i-j][j-1])%=p;//注意if if(i>n)dp[i][j]=((dp[i][j]-dp[i-(n+1)][j-1])%p+p)%p; } for(int i=1;i<=lm;i++) for(int j=1;j<=k;j++) (ans+=dp[i][j]*dp[i][k-j])%=p; for(int i=0;i<=lm;i++) //0 for(int j=0;j<k;j++) //0 (ans+=dp[i][j]*dp[i][k-1-j])%=p; printf("%d ",ans); } return 0; }
以上是关于bzoj 3612 [Heoi2014]平衡——整数划分(dp)的主要内容,如果未能解决你的问题,请参考以下文章