zoukankan      html  css  js  c++  java
  • poj2411Mondriaan's Dream<DP>

    链接:http://poj.org/problem?id=2411

    View Code
     1 #include<cstdio>
     2 #include<string.h>
     3 long long f[2][4100],a,b,n,m,k,j,p;
     4 int main(){
     5    while(scanf("%d%d",&n,&m), n+m){
     6         if( (n*m)&1 ){
     7             puts( "0" );
     8             continue;
     9         }
    10         memset(f,0,sizeof(f));
    11         f[0][0]=p=1,a=n>m?n:m,b=n+m-a ;
    12           for( int i=0; i<a; ++ i ){
    13             for(j=0;++j<=b;){
    14                 for(k=(1<<b);--k+1;)
    15                   if(k&1<<j-1)
    16                      f[p][k&~(1<<j-1)]+=f[1-p][k];
    17                   else{
    18                        f[p][k|1<<j-1]+=f[1-p][k];
    19                        if(j<b&&!(k&1<<j))
    20                           f[p][k|1<<j]+=f[1-p][k];
    21               }
    22               memset(f[p=1-p],0,sizeof(f[p]));    
    23             }
    24           }
    25       printf("%lld\n",f[1-p][0]);
    26    }
    27 }
    View Code
     1 #include <iostream>
     2  #include <cstring>
     3  #include <cstdio>
     4  using namespace std;
     5  int n,m;
     6  long long add;
     7  long long dp[2][1<<12];
     8  void dfs(int i,int s,int cur)
     9  {
    10      if(cur==m) {dp[i][s]+=add;return;}
    11      dfs(i,s,cur+1);
    12      if(cur<m-1&&!(s&1<<cur)&&!(s&1<<(cur+1)))
    13          dfs(i,s|1<<cur|1<<(cur+1),cur+2);
    14  }
    15  int main()
    16  {
    17      while(scanf("%d%d",&n,&m),n+m)
    18      {
    19          if(n*m%2) {printf("0\n");continue;}
    20          int rt=(1<<m)-1;
    21          add=1;
    22          memset(dp,0,sizeof(dp));
    23          dfs(0,0,0);
    24          for(int i=1;i<n;i++)
    25          {
    26              memset(dp[i%2],0,sizeof(dp[1]));
    27              for(int j=0;j<=rt;j++) if(dp[(i-1)%2][j])
    28              {
    29                  add=dp[(i-1)%2][j];
    30                  dfs(i%2,~j&rt,0);
    31              }
    32          }
    33          printf("%I64d\n",dp[(n-1)%2][rt]);
    34      }
    35      return 0;
    36  }
  • 相关阅读:
    sudo配置临时取得root权限
    Linux 前台 和 后台进程 说明
    延迟加载
    事件代理
    字符串方法总结
    javascript
    HTML
    通用样式,如清除浮动
    html脱离文档流事件
    经典容易忽略的行内块
  • 原文地址:https://www.cnblogs.com/jian1573/p/2856610.html
Copyright © 2011-2022 走看看