• 轮廓线 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
  • 相关阅读:
    层叠
    属性值的计算过程
    HTML+CSS笔记1-杂
    C语言—栈
    C语言零碎知识点
    线性表,顺序表,链表,数组的区别与联系
    C语言—单链表
    转载——从机器学习谈起
    readonly和const关键字
    C#中的扩展方法
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6801318.html
Copyright © 2020-2023  润新知