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)的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3612: [Heoi2014]平衡

bzoj 3612: [Heoi2014]平衡整数划分dp

bzoj3612 平衡 (dp)

bzoj4552/Tjoi2016&Heoi2016排序——二分+线段树/平衡树+线段树分裂与合并

HEOI2014 平衡

bzoj 3611: [Heoi2014]大工程