HDU Queuing

来源:互联网 发布:社交软件英语怎么说 编辑:程序博客网 时间:2024/05/16 12:13

原题链接:

思路:本人比较菜,递推想了半天还是没看出来,去膜拜了一顿大佬,终于懂了。网上大部分都是递推+快速幂。然而我发现不用快速幂也可以水过,只需要把大数组换成char类型就可以卡过内存了

#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;int L,M;//用char型的话内存(30*10^6)B近似于30000KB < 32768KBchar dp[maxn][31];void init(){    for(int i=1;i<=30;i++){        dp[1][i]=2;        dp[2][i]=4;        dp[3][i]=6;        dp[4][i]=9;    }    for(int i=5;i<maxn;i++){        for(int j=1;j<=30;j++){            /*            对于m结尾的串dp[i-1][j]            对于f结尾的串又分为mmff和mmf,对应            dp[i-4][j]和dp[i-3][j]            */            dp[i][j]=(dp[i-1][j]+dp[i-3][j]+dp[i-4][j])%j;        }    }}int main(){    //freopen("in.txt","r",stdin);    init();    while(cin>>L>>M){        cout<<dp[L][M]%M<<endl;    }    return 0;}
原创粉丝点击