uva 11270 插头DP

来源:互联网 发布:centos7 源码安装php 编辑:程序博客网 时间:2024/06/10 02:38

思路见点击打开链接的第二种解法

AC代码如下:

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;long long dp[2][1<<12];int N, M;int main(){    while( scanf( "%d%d", &N, &M ) != EOF ){        memset( dp, 0, sizeof( dp ) );        if( N < M ){            swap( N, M );        }        int now, pre;        now = 0;        pre = 1;        dp[now][(1<<M)-1] = 1;        for( int i = 0; i < N; i++ ){            for( int j = 0; j < M; j++ ){                swap( now, pre );                memset( dp[now], 0, sizeof( dp[now] ) );                for( int k = 0; k < (1<<M); k++ ){                    if( j && !( k & (1<<(j-1)) ) && ( k & (1<<j) ) ){                        dp[now][k|(1<<(j-1))] += dp[pre][k];                    }                    dp[now][k^(1<<j)] += dp[pre][k];                }            }        }        cout << dp[now][(1<<M)-1] << endl;    }    return 0;}


0 0