zoukankan      html  css  js  c++  java
  • P1879 [USACO06NOV]玉米田Corn Fields 状压dp

      

    农场主John新买了一块长方形的新牧场,这块牧场被划分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一块正方形的土地。John打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。

    遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是John不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。

    John想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案)

    输入输出格式

    输入格式:

    第一行:两个整数M和N,用空格隔开。

    第2到第M+1行:每行包含N个用空格隔开的整数,描述了每块土地的状态。第i+1行描述了第i行的土地,所有整数均为0或1,是1的话,表示这块土地足够肥沃,0则表示这块土地不适合种草。

    输出格式:

    一个整数,即牧场分配总方案数除以100,000,000的余数。

    输入输出样例

    输入样例#1: 复制
    2 3
    1 1 1
    0 1 0
    输出样例#1: 复制
    9


    非常好的状压dp 和那题国王一样
    #include<bits/stdc++.h>
    using namespace std;
    //input by bxd
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);--i)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m)
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define pb push_back
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define inf 0x3f3f3f3f
    #define lson l,m,pos<<1
    #define rson m+1,r,pos<<1|1
    const int N=900;
    int cnt,state[N];
    int F[N];
    int dp[N][N];
    const int mod=1e9;
    int mp[N];
    int main()
    {
        int n,m;RII(n,m);
        rep(i,1,n)
        rep(j,1,m)
        {
            int x;RI(x);
            F[i]=(F[i]<<1)+x;
        }
    
        rep(i,0,(1<<m)-1 )
        if(!(i&(i<<1)) )
            state[++cnt]=i;
        
        dp[0][1]=1;//一开始写成dp[0][0]=1了  一直都是0。。。
    
        rep(i,1,n)
        rep(j,1,cnt)
        if(state[j]==(state[j]&F[i]))
        rep(p,1,cnt)
        if( (state[j]&state[p])==0 )
            dp[i][j]=(dp[i][j]+dp[i-1][p])%mod;
    
        ll sum=0;
        rep(i,1,cnt)
        sum=(sum+dp[n][i])%mod;
        cout<<sum%mod;
    
        return 0;
    }
    View Code




  • 相关阅读:
    CodeForces 383C-dfs序-线段树
    poj-3321-dfs序-线段树-邻接表
    poj2528-Mayor's posters-线段树离散化、基础
    hdu3333-Turing Tree-线段树+离线+离散化
    poj 1151-atlantis-线段树扫描线求面积并
    Changes favor the connective minds.
    HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题
    HDU 1203 I NEED A OFFER! 01背包
    hdu 1175 连连看 DFS
    Codeforces Round #208 (Div. 2) 358D Dima and Hares
  • 原文地址:https://www.cnblogs.com/bxd123/p/10850802.html
Copyright © 2011-2022 走看看