zoukankan      html  css  js  c++  java
  • 轮廓线 DP uva 11270

    1*2 填满有多少种方法 

    就是状态压缩

    #include<stdio.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<deque>
    #include<map>
    #include<iterator>
    #include<stack>
    
    using namespace std;
    
    #define ll   long long
    #define MAXN  110
    #define inf  2000000007
    
    ll dp[2][(1<<11)+10];
    
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(dp,0,sizeof(dp));
            if(n<m)
                swap(n,m);
            int now=0,pre=1;
            int  e=(1<<m)-1;
            dp[now][e]=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<=e;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];      // 这一格不放     这一格竖的放  体会    
                    }
                }
            }
            printf("%lld
    ",dp[now][e]);
    
        }
        return 0;
    }
    View Code
  • 相关阅读:
    单词 统计
    第十周学习记录
    梦断代码阅读笔记03
    梦断代码阅读笔记02
    梦断代码阅读笔记01
    用户模板和用户场景
    第九周学习记录
    分享好友-分享朋友圈
    生命周期函数-页面刷新
    底部导航的设置
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6801318.html
Copyright © 2011-2022 走看看