poj 2411

2859 단어
첫 번째 줄을 열거한 상태, 한 줄의 다음 줄에 대한 상태는 현재 줄이 반대로 바뀌는 것이다. 이때 너는 가로로 놓은 것을 모두 놓아주었다. 그러면 세로로 놓은 것만 생각하면 된다.
#include
#include
#define LL long long
using namespace std;  
LL h,w;  
LL dp[20][1<<14]; 
void dfs(LL nw,LL ni,LL s,LL fu)  
{
    if(ni==h)  
    {  
        dp[nw][s]+=fu;
        return;
    } 
    dfs(nw,ni+1,s,fu);
    if(!(s&1<1<1) && ni+2<=h)  
        dfs(nw,ni+2,s|1<1<1,fu);
}  

int main()  
{   
    while(1)  
    {  
        cin>>h>>w;
        if(h==0&&w==0) break;
        memset(dp,0,sizeof(dp));   
        dfs(1,0,0,1);
        //for(LL i=0;i<=(1<
        //cout<
        //cout<
        LL len=(1<1;
        for(LL i=2;i<=w;i++)  
        {  
            for(LL j=0;j<=len;j++)  
            {  
                if(!dp[i-1][j])   
                    continue;
                dfs(i,0,~j&len,dp[i-1][j]); 
            }  
        }  
        cout<return 0;  
} 

좋은 웹페이지 즐겨찾기