poj 3254(状态压缩基础题)
题意:就是你给一个n行m列的矩阵,矩阵里的元素由0和1组成,1代表肥沃的土地可以种植作物,0则不可以种植作物,并且相邻的土地不能同时种植作物,问你有多少种种植方案。
分析:这是我做的第一道状态压缩dp的题,总的来说还是很容易理解的,直接上代码!
代码实现:
#include<stdio.h>
#include<string.h>
#include<math.h> #define mod 100000000
int n,m,a[15];
int dp[13][(1<<12)+10]; int check(int x,int flag)
{
int i,temp=3;
if((a[x]&flag)!=flag)//判断下那一行种是否能够找出flag这个状态
return 0;
if((flag&(flag<<1))!=0||(flag&(flag>>1))!=0)
return 0;
return 1;
} void solve()
{
int i,j,k,max,res=0;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
max=1<<m;
for(i=1;i<=n;i++)//枚举每一行
{
for(j=0;j<max;j++)//每一行的状态
{
if(check(i,j)==0)//看这一状态是否合法
continue;
for(k=0;k<max;k++)//枚举这一行上面的所有状态
{
if((j&k)!=0)
continue;
dp[i][j]=dp[i][j]+dp[i-1][k];
if(dp[i][j]>=mod)
dp[i][j]-=mod;
}
}
}
for(i=0;i<max;i++)
{
res=res+dp[n][i];
if(res>=mod)
res=res%mod;
}
printf("%d\n",res);
} int main()
{
int x;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j;
for(i=1;i<=n;i++)
{
a[i]=0;
for(j=1;j<=m;j++)
{
scanf("%d",&x);
a[i]=(a[i]<<1)+x;//把二进制压缩成一个十进制数字
}
}
solve();
}
return 0;
}
poj 3254(状态压缩基础题)的更多相关文章
- hdu 2167(状态压缩基础题)
题意:给你一个矩阵,让你在矩阵中找一些元素使它们加起来和最大,但是当你使用某一个元素时,那么这个元素周围的其它八个元素都不能取! 分析:这是一道比较基础的状态压缩题,也是我做的第三道状态压缩的题,但是 ...
- hdu 1565(状态压缩基础题)
题意:容易理解. 分析:这是我做的状态压缩第二题,一开始超内存了,因为数组开大了,后来超时了,因为能够成立的状态就那么多,所以你应该先把它抽出来!!总的来说还是比较简单的!! 代码实现: #inclu ...
- poj 3254(状态压缩+动态规划)
http://poj.org/problem?id=3254 题意:有一个n*m的农场(01矩阵),其中1表示种了草可以放牛,0表示没种草不能放牛,并且如果某个地方放了牛,它的上下左右四个方向都不能放 ...
- poj 3254 状态压缩DP
思路:把每行的数当做是一个二进制串,0不变,1变或不变,找出所有的合法二进制形式表示的整数,即相邻不同为1,那么第i-1行与第i行的状态转移方程为dp[i][j]+=dp[i-1][k]: 这个方程得 ...
- poj 3254 状态压缩
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 15285 Accepted: 8033 Desc ...
- POJ 3254 状态压缩 DP
B - Corn Fields Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536KB ...
- poj1185 状态压缩经典题
状态压缩的好题,直接求会爆内存,先把所有可能的状态求出来存在stk里,然后f[i][k][t]表示i行状态为t,i-1状态为k,由i-1状态来推出i状态即可 注意要打好边际条件的状态,并且某个可行状态 ...
- POJ 1185 状态压缩DP(转)
1. 为何状态压缩: 棋盘规模为n*m,且m≤10,如果用一个int表示一行上棋子的状态,足以表示m≤10所要求的范围.故想到用int s[num].至于开多大的数组,可以自己用DFS搜索试试看:也可 ...
- POJ 1185 状态压缩DP 炮兵阵地
题目直达车: POJ 1185 炮兵阵地 分析: 列( <=10 )的数据比较小, 一般会想到状压DP. Ⅰ.如果一行10全个‘P’,满足题意的状态不超过60种(可手动枚举). Ⅱ.用DFS ...
随机推荐
- python_ftplib实现通过FTP下载文件
1. Ftplib常用函数介绍 Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,本次主要介绍连接FTP并且进行文件下载功能,可 ...
- Python概述_软件安装_常见问题
1. Python安装 目前python有2个大版本,2和3,由于2和3语法有差别,现有的许多库都是基于python2开发,本系列文章以python2为主. 1.1 重要概念 1. 动态语言 运行 ...
- gcc 优化选项 -O1 -O2 -O3 -Os 优先级
http://hi.baidu.com/xiaole10368/item/7cea9b1369cc240db88a1a5c 少优化->多优化: O0 -->> O1 -->&g ...
- weblogic 安装与配置
Weblogic 安装 从官网 下载 需要的weblogic 版本, 解压缩后得到 wls1036_generic.jar [fmw_12.1.3.0.0_wls.jar , fmw_12.2.1.1 ...
- 最简单的jdbc程序
package cn.ytu.mybatis.jdbc; import java.sql.Connection; import java.sql.DriverManager; import jav ...
- TestDirector创建域或工程
一.打开TestDirector 1.打开TestDirector,进入如下页面 点击左上角"Site Administrator"进入 2.在输入框里输入正确的Site Admi ...
- Java-数据结构与算法-逢3减1-面向对象
1.要求:有一群人围成一圈数数,逢3退1人,要求算出最后留下来的人的下标2.用面向对象思想,有三个步骤:(1)有哪些类:找名词--"有一群人围成一圈",所以有类People,Peo ...
- 弹性ScrollView,和下啦刷新的效果类似 实现下拉弹回和上拉弹回
今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个很多需求都用的这种效果 其实这是一个自定义的scrollView,上代码,这是我写在一个公共的组件包里的 package com.p ...
- POJ3252——Round Number(组合数学)
Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...
- 大众点评开源分布式监控平台 CAT 深度剖析
一.CAT介绍 CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解.CAT不仅增强了CAL系统核心模型,还添加了更丰富的报 ...