zoukankan      html  css  js  c++  java
  • [HEOI2014]平衡(整数划分数)

    下课了,露露、花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”。

    这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮。尺子有 2n + 1 条等距的刻度线,第 n + 1 条 刻度线恰好在尺子的中心,且与正三棱柱的不在课桌上的棱完全重合。

    露露发现这个“跷跷板”是不平衡的(尺子不平行于地平面)。于是,她又在尺子上放 了几个橡皮,并移动了一些橡皮的位置,使得尺子的 2n + 1 条刻度线上都恰有一块相同质 量的橡皮。“跷跷板”平衡了,露露感到很高兴。

    花花觉得这样太没有意思,于是从尺子上随意拿走了 k 个橡皮。令她惊讶的事情发生了: 尺子依然保持着平衡! 萱萱是一个善于思考的孩子,她当然不对尺子依然保持平衡感到吃惊,因为这只是一个 偶然的事件罢了。令她感兴趣的是,花花有多少种拿走 k 个橡皮的方法,使得尺子依然保 持平衡?当然,为了简化问题,她不得不做一些牺牲——假设所有橡皮都是拥有相同质量的 质点。但即使是这样,她也没能计算出这个数目。放学后,她把这个问题交给了她的哥哥/ 姐姐——Hibarigasaki 学园学生会会长,也就是你。当然,由于这个问题的答案也许会过于 庞大,你只需要告诉她答案 mod p 的值。

    Solution

    非常好的一道题。

    题目相当于在两边放k个数,使他们相等,我们可以跑一个整数划分数dp。

    但是这道题有一个限制是每个数是n以内的。

    所以我们要在枚举超过n时减掉不合法方案数,dp[i-(n+1)][j-1]就是不合法方案。

    最后枚举一边放了多少个,算一下,注意讨论中间放的情况。

    Code

    #include<iostream>
    #include<cstdio>
    #define R register
    using namespace std;
    long long dp[150009][15],ans,n,k,p,t;
    int main()
    {
        scanf("%lld",&t);
        for(int o=1;o<=t;++o)
        {
           scanf("%lld%lld%lld",&n,&k,&p);
            ans=0;
            dp[0][0]=1;
            for(R int i=1;i<=n*k;++i)
              for(R int j=1;j<=i&&j<=k;++j)
              {
                  dp[i][j]=(dp[i-j][j-1]+dp[i-j][j])%p;
                  if(i>n)dp[i][j]=(dp[i][j]-dp[i-(n+1)][j-1]+p)%p;
              }
            for(R int j=0;j<=k;++j)
              for(R int i=0;i<=n*k;++i)
              {
                  ans=(ans+dp[i][j]*dp[i][k-j])%p;
                  if(j<k)ans=(ans+dp[i][j]*dp[i][k-j-1])%p;
              }
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    解决RuntimeError: cuda runtime error (30) : unknown error at /pytorch/aten/src/THC/THCGeneral.cpp:70&NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the late
    查看Ubuntu/Anaconda/cuda/cudnn/Tensorflow/Pytorch版本
    创建新用户
    142. Linked List Cycle II
    网页版Instagram如何发照片
    141. Linked List Cycle
    将博客搬至CSDN
    92. Reverse Linked List II
    Dlib使用过程全记录(一)
    定制new和delete
  • 原文地址:https://www.cnblogs.com/ZH-comld/p/9823152.html
Copyright © 2011-2022 走看看