hdu 2604 queue #DP#滚动数组

来源:互联网 发布:淘宝上买战地4 编辑:程序博客网 时间:2024/05/21 15:40

http://acm.hdu.edu.cn/showproblem.php?pid=2604

由f、m组成长度为L的字符串的排列数,满足条件:不含fmf,fff的字串

///DP M<=30,想到打表,结果超了内存,// 滚动数组过,开始用8个变量也超时了,那样太多复制操作了#include <stdio.h>int m,l;int solve(){    if(l == 1)        return 2 % m;    int ff[2],fm[2],mm[2],mf[2];    ff[0] = fm[0] = mm[0] = mf[0] = 1;    int p,c = 0;    for(int i = 3; i <= l; ++i)    {        c = (i&1);        p = 1 - c;        ff[c] = mf[p];        fm[c] = (mf[p] + ff[p]) % m;        mf[c] = mm[p];        mm[c] = (mm[p] + fm[p]) % m;    }    return (ff[c] + fm[c] + mf[c] + mm[c] ) % m;}int main(){    while(scanf("%d%d",&l,&m) != EOF)    {        printf("%d\n",solve());    }    return 0;}/**3 84 74 8*/




原创粉丝点击