题目:http://poj.org/problem?id=3254

利用二进制压缩状态,每一个整数代表一行的01情况;

注意预处理出二进制表示下没有两个1相邻的数的方法,我的方法(不知为何)错了,看到了别人的优美方法;

再进行DP即可。

代码如下:

#include<iostream>
#include<cstdio>
using namespace std;
int m,n,a[15],num[15],p[3005],f[15][3005],tot,INF=100000000,ans;
//int pw(int w)
//{
// int ret=1;
// int sum=1;
// while(w)
// {
// ret*=2;
// if(w&1)sum*=ret;
// w/=2;
// }
// return sum;
//}
//void ap(int w,int b,int jl)//2^w b=0/1 +jl
//{
// if(w==n-1)
// {
// if(!b)p[++tot]=jl;
// else
// {
// p[++tot]=jl;
// p[++tot]=jl+pw(w);
// }
// return;
// }
// if(!b)ap(w+1,1,jl);
// else
// {
// ap(w+1,0,jl+pw(w));
// ap(w+1,1,jl);
// }
//}
inline bool ok(int x){ //判断状态x是否可行
if(x&x<<1) return false;//若存在相邻两个格子都为1,则该状态不可行
return true;
}
void init(){ //遍历所有可能的状态
int total = 1 << n; //遍历状态的上界
for(int i = 0; i < total; ++i){
if(ok(i))p[++tot] = i;
}
}
int main()
{
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&a[j]);
num[i]*=2;
num[i]+=a[j];
}
init();
// ap(0,1,0);
// cout<<tot<<endl;
for(int i=1;i<=tot;i++)
{
// cout<<p[i]<<endl;
if(!(p[i]&(~num[1])))f[1][i]++;
}
for(int i=2;i<=m;i++)
{
for(int j=1;j<=tot;j++)
{
if(p[j]&(~num[i-1]))continue;
for(int k=1;k<=tot;k++)
{
if((p[k]&(~num[i]))||(p[k]&p[j]))continue;
f[i][k]+=f[i-1][j];
f[i][k]%=INF;
}
}
}
for(int i=1;i<=tot;i++)
{
ans+=f[m][i];
ans%=INF;
}
printf("%d",ans);
return 0;
}

  

poj3254二进制放牛——状态压缩DP的更多相关文章

  1. POJ3254 - Corn Fields(状态压缩DP)

    题目大意 给定一个N*M大小的土地,土地有肥沃和贫瘠之分(每个单位土地用0,1来表示贫瘠和肥沃),要求你在肥沃的单位土地上种玉米,如果在某个单位土地上种了玉米,那么与它相邻的四个单位土地是不允许种玉米 ...

  2. POJ3254(入门状态压缩dp)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13203   Accepted: 6921 Desc ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. 状态压缩DP(大佬写的很好,转来看)

    奉上大佬博客 https://blog.csdn.net/accry/article/details/6607703 动态规划本来就很抽象,状态的设定和状态的转移都不好把握,而状态压缩的动态规划解决的 ...

  5. poj 3254(状态压缩DP)

    poj  3254(状态压缩DP) 题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相 ...

  6. POJ 3254 Corn Fields(状态压缩DP)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4739   Accepted: 2506 Descr ...

  7. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  8. DP大作战—状态压缩dp

    题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...

  9. POJ 3311 Hie with the Pie(Floyd+状态压缩DP)

    题是看了这位的博客之后理解的,只不过我是又加了点简单的注释. 链接:http://blog.csdn.net/chinaczy/article/details/5890768 我还加了一些注释代码,对 ...

随机推荐

  1. HDU 2112 HDU Today(STL MAP + Djistra)

    题目链接:HDU Today 立即集训要開始,抓紧时间练练手,最短路的基础题,第一次用STL的map 题目非常水,可是错了N遍.手贱了.本题不优点理的就是把地名转化为数字 #include <i ...

  2. ip获取位置

    $ip = $_SERVER["REMOTE_ADDR"]; $url = "http://ip.taobao.com/service/getIpInfo.php?ip= ...

  3. WPF实现带全选复选框的列表控件

    本文将说明如何创建一个带全选复选框的列表控件.其效果如下图: 这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成.它的操作逻辑: 当选中“全选”时,列表中所有的项目都会被选中 ...

  4. 微信小程序TabBar的使用

    一.TabBar使用步骤 1.创建所需要的界面和所需要的图片: 2.配置文件: 我们找到项目根目录中的配置文件 app.json 加入如下配置信息 "tabBar": { &quo ...

  5. 远程访问(HttpClient和HttpResponse的使用) 原型模式

    package com.webserver.webservice; import java.io.ByteArrayInputStream; import java.io.FileOutputStre ...

  6. BZOJ1815: [Shoi2006]color 有色图

    BZOJ1815: [Shoi2006]color 有色图 Description Input 输入三个整数N,M,P 1< = N <= 53 1< = M < = 1000 ...

  7. Eclipse javax.servlet.jsp.PageContext cannot be resolved to a type 错误解决办法

    不要 直接将jsp-api.jar拷贝到lib目录下,而是通过外部jar包引用.项目 右键->Properties->Libraries->Add External JARS-选择 ...

  8. sap crm 常用表

    [转自 http://blog.csdn.net/zhongguomao/article/details/6714616] SAP CRM 参数文件集目标组常用表: CRMD_MKTTG_TG_T C ...

  9. RDLC报表-分组序号

    1.RowNumber("group_name")是按行每个分组重新1,2,3这样来显示的,如果需要按每个分组来显示1,并且递增,则需要通过自定义代码来控制,在报表-属性-代码里插 ...

  10. Linux下监视GPU、CPU的使用情况

    1.在运行Tensorflow等程序时会使用到NVIDIA的GPU,所以在程序运行时需要监控GPU的运行情况 使用 nvidia-smi 命令 ,显示如下: nvidia-smi 显示解读: GPU: ...