• 【noi 2.6_9270】&【poj 2440】DNA(DP)


    题意:问长度为L的所有01串中,有多少个不包含"101"和"111"的串。

    解法:f[i][j]表示长度为i的01串中,结尾2位的十进制数是j的合法串的个数。那么,便由f[i-1][ ]逐个推出。

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

    优化:g[i]直接表示长度为i的01串中合法串的个数。由基本的二维式子逐层递推便可推出。
                 g[i]=f[i][0]+f[i][1]+f[i][2]+f[i][3]
    f[i-1][]:       =[0]*2+[1]*2+[2]+[3]
                      =g[i-1]+[0]+[1]
    f[i-2][]:                  =[0]+[2]+[0]
    f[i-3][]:                  =[0]+[2]+[1]+[3]+[0]+[2]
                                 =g[i-3]+[0]+[2]
    f[i-4][]:                  =[0]+[2]+[1]+[3]
                                  =g[i-4]
    即:g[i]=g[i-1]+g[i-3]+g[i-4];

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 #define L (int)1e6+10
     7 #define mod 2005
     8 int f[L];
     9 
    10 int main()
    11 {
    12     int l;
    13     scanf("%d",&l);
    14     f[1]=2,f[2]=4,f[3]=6,f[4]=9;
    15     for (int i=5;i<=l;i++)
    16       f[i]=(f[i-1]+f[i-3]+f[i-4])%mod;
    17     printf("%d
    ",f[l]);
    18     return 0;
    19 }
    View Code 2
  • 相关阅读:
    MHA自动切换流程
    手写源码之 简单实现on emit off
    手写源码 -- bind,call,aplly
    多维数组转化为一维数组
    electron+vue中使用nodeJs的fs模块以及上传文件
    制作海报
    vue中引入播放器(百度播放器和腾讯云播放器)
    webpack配置
    webpack
    css样式
  • 原文地址:https://www.cnblogs.com/konjak/p/5968422.html
Copyright © 2020-2023  润新知