poj3254
还是那句老话:dp关键在状态;
求有多少种排布方式,是任意两头牛不相邻(有些地方不能放);
不用心,一开始还纠结了半天
和之前USACO上某题方法是一样的,每一行放或不放只有两种情况
把它当作一个二进制数,转化为十进制作为状态则
到第i行第j种状态的方案数为
f[i,j]=sigma f[i-1,k] (j and k=0) 很飘逸的位运算解决了不相邻(可以想一想为什么);
code(代码比较丑陋 )
const mo=;
var a,f:array[..,..] of longint;
p,d:array[..] of longint;
v:array[..] of boolean;
s,n,m,i,j,k,x,y,t:longint;
ans:int64;
ff:boolean; function check(x:longint):boolean;
begin
s:=;
fillchar(p,sizeof(p),);
while x<> do
begin
inc(s);
p[s]:=x mod ;
if (p[s]=) then
begin
if v[s] then exit(false);
if (p[s]=p[s-]) then exit(false);
end;
x:=x shr ;
end;
exit(true);
end; begin
readln(n,m);
t:= shl m-;
for i:= to n do
begin
fillchar(v,sizeof(v),false);
for j:= to m do
begin
read(x);
if x= then v[j]:=true;
end;
for j:= to t do
if check(j) then
begin
inc(d[i]);
a[i,d[i]]:=j;
end;
readln;
end;
for i:= to d[] do
f[,i]:=;
for i:= to n do
begin
for j:= to d[i] do
begin
x:=a[i,j];
for k:= to d[i-] do
begin
y:=a[i-,k];
if x and y= then
f[i,j]:=(f[i,j]+f[i-,k]) mod mo;
end;
end;
end;
ans:=;
for i:= to d[n] do
ans:=(ans+f[n,i]) mod mo;
writeln(ans mod mo);
end.
poj3254的更多相关文章
- 【poj3254】 Corn Fields
http://poj.org/problem?id=3254 (题目链接) 题意 给出一块n*m的田地,有些能够耕种,有些不能.要求将牛两两不相邻的放在田中,牛的个数至少为1个.问有多少种放法. So ...
- poj3254状压DP入门
G - 状压dp Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536KB 64bit ...
- [poj3254]Corn Fields_状压dp
Corn Fields poj3254 题目大意:给你一个n*m的地,每一块地可以种或不种,两块种过的地不能挨着,可以一块都不种,问所有的种地方案数. 注释:读入用0和1,1<=n,m<= ...
- 【poj3254】Corn Fields 状态压缩dp
AC通道:http://vjudge.net/problem/POJ-3254 [题目大意] 农夫约翰购买了一处肥沃的矩形牧场,分成M*N(1<=M<=12; 1<=N<=12 ...
- POJ3254:Corn Fields(状压dp第一发)
题目:http://poj.org/problem?id=3254 直接上代码吧,刚开始做时主要的问题就是看不懂二进制,有个博客写的太好了,就直接把题解复制在下面了. #include <ios ...
- poj3254 Corn Fields 利用状态压缩求方案数;
Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10658 ...
- poj3254(状态压缩DP)
poj3254 题意 给出一个01矩阵,1表示当前这个位置可以放牛,要求放牛的方案保证牛不能左右或上下相邻,求方案数. 分析 dp[S][i]: 表示到 i 行时的状态S(用二进制数表示),那么状态转 ...
- 【POJ3254】Corn Fields(状压DP)
题意: 一个M x N矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻.问有多少种放牛方案( ...
- 【POJ3254】Corn Fields 状压DP第一次
!!!!!!! 第一次学状压DP,其实就是运用位运算来实现一些比较,挺神奇的.. 为什么要发“!!!”因为!x&y和!(x&y)..感受一下.. #include <iostre ...
- 轮廓线DP POJ3254 && BZOJ 1087
补了一发轮廓线DP,发现完全没有必要从右往左设置状态,自然一点: 5 6 7 8 9 1 2 3 4 如此设置轮廓线标号,转移的时候直接把当前j位改成0或者1就行了.注意多记录些信息对简化代码是很有帮 ...
随机推荐
- ubuntu更新源,简单两步搞定
1.启动器中打开Ubuntu软件中心 2.鼠标顶部面板点击编辑选择软件源(163.sohu) 搞定!
- QQ空间g_tk加密算法PHP版
QQ空间g_tk加密算法PHP版 //G_tk计算 function getGTK($skey){ $hash = 5381; for($i=0;$i<strlen($skey);++$i){ ...
- FireDAC如何连接ORACLE数据库
UniDac对Oracle的Direct连接,不需要安装Oracle客户端dll,deploy时真的是方便又快捷. FireDac连接Oracle,在没有Oracle Client的情况下,是可以连接 ...
- 利用IDE编写C语言程序的一点注意事项
前言:我是喜欢编程的一只菜鸟,在自学过程中,对遇到的一些问题和困惑,有时虽有一点体会感悟,但时间一长就会淡忘,很不利于知识的积累.因此,想通过博客园这个平台,一来记录自己的学习体会,二来便于向众多高手 ...
- 十、mysql事务的简介
1. myisam跟memory支持表级别锁定 BDB 页级锁定 Innodb 行级锁定 2.表锁(不是表嫂哈) lock table read //只读表锁,也就是说执行了这个锁后,锁内的操作只能为 ...
- linux工作队列
工作队列一般用来做滞后的工作,比如在中断里面要做很多事,但是比较耗时,这时就可以把耗时的工作放到工作队列.说白了就是系统延时调度的一个自定义函数. 工作队列是实现延迟的新机制,从 2.5 版本 Lin ...
- Mvc生命周期深度剖析
客户端发送请求->IIS, UrlRouting模块对比URL, 默认如果该URL能对应到实体文件则退出MVC管道把控制权交还给IIS. 如果RegisterRoutes中的路由规则对比成功默认 ...
- html input type="button" 页面跳转
<div class="message_text"> <p>你的申请已提交,请耐心等候哦!~</p><br /> <input ...
- The ‘Microsoft.ACE.OLEDB.12.0′ provider is not registered on the local machine. (System.Data)
When you try to import Excel 2007 or later “.xlsx” files into an SQL Server 2008 database you may ge ...
- Tomcat 搭配 Nginx 还是 Apache 呢?
Apache .Tomcat.Nginx的区别, 哪个与Tomcat搭配效率高? 一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机 ...