zoukankan      html  css  js  c++  java
  • 【noi 2.6_9275】&【bzoj 3398】Bullcow(DP){Usaco2009 Feb}

    题意:一共有N只牡牛(公牛)和牝牛(母牛),每2只牡牛间至少要有K只牝牛才不会斗殴。问无斗殴发生的方案数。

    解法:f[i][j]表示一共i只牛,最后一只是j(0为牝牛,1为牡牛)的方案数。
    f[i][0]=f[i-1][1]+f[i-1][0]; f[i][1]=f[i-k-1][1]+f[i-k-1][0](这个小心不要漏了,因为没有要求2只牡牛间一定是K只牝牛);

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 #define N 100010
     7 #define mod 5000011
     8 
     9 int f[N][2];
    10 int main()
    11 {
    12     int n,k;
    13     scanf("%d%d",&n,&k);
    14     f[1][0]=f[1][1]=1;
    15     for (int i=2;i<=n;i++)
    16     {
    17       f[i][0]=(f[i-1][0]+f[i-1][1])%mod;
    18       f[i][1]=(i>k+1)?f[i-k-1][0]+f[i-k-1][1]:1;
    19     }
    20     printf("%d
    ",(f[n][0]+f[n][1])%mod);
    21     return 0;
    22 }
    View Code 1

    优化:可发现每次调用状态都是[0]和[1]一起,所以可以简化成一维。

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 #define N 100010
     7 #define mod 5000011
     8 
     9 int f[N];
    10 int main()
    11 {
    12     int n,k;
    13     scanf("%d%d",&n,&k);
    14     f[1]=2;
    15     for (int i=2;i<=n;i++)
    16       f[i]=(f[i-1]+((i>k+1)?f[i-k-1]:1))%mod;
    17     printf("%d
    ",f[n]);
    18     return 0;
    19 }
    View Code 2
  • 相关阅读:
    FastAdmin CMS 插件下载
    使用 Python 连接到 PADS Layout
    Javascript undefined 和 null
    反馈给又拍云需要以下信息
    Web前端性能优化之图片优化
    nodejs--实现跨域抓取数据
    HTML6 展望
    cSS3 伪类:nth-child 的使用方法
    css3中的几何图形shape研究
    iScroll5 API速查随记
  • 原文地址:https://www.cnblogs.com/konjak/p/5969543.html
Copyright © 2011-2022 走看看