zoj 2745 dp

dp,以后想清楚了再打代码,疼了很久 ( 注意题目中的这句话 “ In any consecutive substring of S”)

#include<iostream>
#include<cstring>
#include <cstdio>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include <set>
#include<ctime>
#include<cmath>
#include <cstdlib>
#include<algorithm>
using namespace std;
#define LL long long
const int mid=1;
const LL N=100;
const LL M=10+mid;
LL dp[N][M][M][M];
LL sum[N][M];

int main(){
    dp[1][1][1][0]=1;  
    dp[1][1][0][1]=1;  
    for(int i=1;i<=62;i++){
        for(int j=1;j<=5;j++){
            for(int k=0;k<=j;k++){
                for(int l=0;l<=j;l++){
                    if(k&&l){
                        if(k+1<=j) dp[i+1][j][k+1][l-1]+=dp[i][j][k][l];
                        else  dp[i+1][k+1][k+1][l-1]+=dp[i][j][k][l];

                        if(l+1<=j) dp[i+1][j][k-1][l+1]+=dp[i][j][k][l];
                        else  dp[i+1][l+1][k-1][l+1]+=dp[i][j][k][l];
                    }else {
                        if(!k&&l){
                            if(l+1<=j) dp[i+1][j][k][l+1]+=dp[i][j][k][l];
                            else dp[i+1][l+1][k][l+1]+=dp[i][j][k][l];

                            dp[i+1][j][k+1][l-1]+=dp[i][j][k][l];
                        }else if(k&&!l){
                            if(k+1<=j) dp[i+1][j][k+1][l]+=dp[i][j][k][l];
                            else dp[i+1][k+1][k+1][l]+=dp[i][j][k][l];

                            dp[i+1][j][k-1][l+1]+=dp[i][j][k][l];
                        }
                    }
                }
            }
        }
    }
    for(int i=1;i<=62;i++){
        //cout<<i<<": ";
        for(int j=0;j<=5;j++){
            for(int k=0;k<=j;k++){
                for(int l=0;l<=j;l++){
                    sum[i][j]+= dp[i][j][k][l];
                }
            }
            /*        cout<<sum[i][j]<<" ";*/
        }
        //cout<<endl;
    }
    int n,m;
    while(cin>>n>>m){
        LL ans=0;
        for(int i=0;i<=m;i++){
            ans+=sum[n][i];
        }
        cout<<ans<<endl;
    }
}
posted @ 2012-04-26 16:49  HaoHua_Lee  阅读(185)  评论(0编辑  收藏  举报