zoukankan      html  css  js  c++  java
  • 一本通1652牡牛和牝牛

    1652:牡牛和牝牛

    时间限制: 1000 ms         内存限制: 524288 KB

    【题目描述】

    原题来自:USACO 2009 Feb. Silver

    牡 mǔ,畜父也。牝 pìn,畜母也。 ——《说文解字》

    约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛。牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 K 只牝牛。

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

    【输入】

    一行,输入两个整数 N 和 K。

    【输出】

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

    【输入样例】

    4 2

    【输出样例】

    6

    【提示】

    样例说明

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

    (母母母母,公母母母,母公母母,母母公母,母母母公,公母母公)

    数据范围与提示:

    对于全部数据,1N105,0K<N

    sol:dp想不到吧。。。。

    dp[i]表示 i 为公牛,很显然的转移就是dp[i]+=dp[1]+dp[2]+...+dp[i-k-1]

    前缀和优化后就是O(n)了

    #include <bits/stdc++.h>
    using namespace std;
    typedef int ll;
    inline ll read()
    {
        ll s=0;
        bool f=0;
        char ch=' ';
        while(!isdigit(ch))
        {
            f|=(ch=='-'); ch=getchar();
        }
        while(isdigit(ch))
        {
            s=(s<<3)+(s<<1)+(ch^48); ch=getchar();
        }
        return (f)?(-s):(s);
    }
    #define R(x) x=read()
    inline void write(ll x)
    {
        if(x<0)
        {
            putchar('-'); x=-x;
        }
        if(x<10)
        {
            putchar(x+'0'); return;
        }
        write(x/10);
        putchar((x%10)+'0');
        return;
    }
    #define W(x) write(x),putchar(' ')
    #define Wl(x) write(x),putchar('
    ')
    const int Mod=5000011;
    const int N=100005;
    int n,k;
    int dp[N],Qzh[N];
    inline int Ad(int x,int y)
    {
        x+=y;
        x-=(x>=Mod)?Mod:0;
        return x;
    }
    int main()
    {
        int i;
        R(n); R(k);
        for(i=1;i<=n;i++) dp[i]=1;
        for(i=1;i<=n;i++)
        {
            if(i>k) dp[i]=Ad(dp[i],Qzh[i-k-1]);
            Qzh[i]=Ad(Qzh[i-1],dp[i]);
        }
        Wl((Qzh[n]+1)%Mod);
        return 0;
    }
    /*
    input
    4 2
    output
    6
    */
    View Code
  • 相关阅读:
    设计模式之工厂模式-抽象工厂(02)
    1036 跟奥巴马一起编程 (15 分)
    1034 有理数四则运算 (20 分)
    1033 旧键盘打字 (20 分)
    1031 查验身份证 (15 分)
    大学排名定向爬虫
    1030 完美数列 (25 分)二分
    1029 旧键盘 (20 分)
    1028 人口普查 (20 分)
    1026 程序运行时间 (15 分)四舍五入
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/10526849.html
Copyright © 2011-2022 走看看