zoukankan      html  css  js  c++  java
  • 牡牛和牝牛

    题目链接:

    https://www.acwing.com/problem/content/1309/

    Description

    约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛。

    牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 K 只牝牛。

    请计算一共有多少种排队的方法,所有牡牛可以看成是相同的,所有牝牛也一样,答案对(5000011)取模。

    Input

    一行,输入两个整数 N 和 K。
    数据范围
    (1≤N≤10^5,)
    (0≤K<N)

    Output

    一个整数,表示排队的方法数。

    Sample Input

    4 2
    

    Sample Output

    6
    

    Hint

    6 种方法分别是:牝牝牝牝,牡牝牝牝,牝牡牝牝,牝牝牡牝,牝牝牝牡,牡牝牝牡。

    题意

    牝牛用0表示,牡牛用1表示。即求有多少种只包含01的序列长度为n,1之间至少有k个0.

    题解

    递推做法的组合问题。(f[i])表示在i位置放置最后一个1,(f[i]=f[1) ~ ((i-k-1)])之和。用一个常量记录(f(1) ~ (i-k-1))之和,时间复杂度(O(n)).

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100010,mod=5000011;
    int f[N];
    int main(){
        int n,k;
        scanf("%d%d",&n,&k);
        f[0]=1;
        int tmp=1;
        for(int i=1;i<=n;++i){
            (f[i]+=tmp)%=mod;
            if(i-k>0)
                (tmp+=f[i-k])%=mod;
        }
        int res=0;
        for(int i=0;i<=n;++i){
            (res+=f[i])%=mod;
        }
        cout<<res<<endl;
        return 0;
    }
    
  • 相关阅读:
    parse_str() 函数把查询字符串解析到变量中。
    ThinkPHP函数详解:L方法
    ThinkPHP函数详解:F方法
    PHP defined() 函数
    Ajax beforeSend和complete 方法
    mdb文件怎么打开
    网盘资料
    win7下IIS的安装和配置
    perl5 第十一章 文件系统
    perl5 第十章 格式化输出
  • 原文地址:https://www.cnblogs.com/jjl0229/p/12716271.html
Copyright © 2011-2022 走看看