bzoj 1725:Corn Fields牧场的安排

2023-10-07 19:59
文章标签 bzoj 安排 1725 corn fields 牧场

本文主要是介绍bzoj 1725:Corn Fields牧场的安排,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地。FJ打算在牧场上的某几格土地里种上美味的草,供他的奶牛们享用。遗憾的是,有些土地相当的贫瘠,不能用来放牧。并且,奶牛们喜欢独占一块草地的感觉,于是FJ不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。当然,FJ还没有决定在哪些土地上种草。 作为一个好奇的农场主,FJ想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择。当然,把新的牧场荒废,不在任何土地上种草,也算一种方案。请你帮FJ算一下这个总方案数。

Input

* 第1行: 两个正整数M和N,用空格隔开

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

Output

* 第1行: 输出一个整数,即牧场分配总方案数除以100,000,000的余数


          感觉这是一道简单版的炮兵阵地?

      很容易想到这道题的状态为dp[i][state]表示考虑到第i行了,state中的0或1表示选或没选。

      接下来考虑转移,对于现在这一行的每个状态,肯定是由上一行的某个与它互相不干涉的状态转移而来,

      为了判断上下互相不干涉,我们只需要两个相与值为0即可判断,

      对于左右无相邻,我们可以讲当前state左移一位与当前state相与,如果为0,则说明没有相邻选中的了。

      对于不在贫瘠的草上,我们可以将贫瘠的草设为1,将当前状态与草地状态相与,如果为0,则说明没有选中的在贫瘠的草上了。

      最后考虑边界条件,对于开始,第0行全不选的答案为1,很套路的状态了。最终的答案便是,最后一行,所有状态的答案之和。

       下附AC代码。

#include<iostream>
#include<stdio.h>
#include<string.h>
#define maxn 14
using namespace std;
typedef long long ll;
const ll mod=100000000;
ll n,m;
ll dic[maxn];
ll dp[maxn][(1<<maxn)];
ll judge1(ll now)
{if((now&(now>>1))) return false;return true;
}
int main()
{scanf("%lld%lld",&n,&m);for(ll i=0;i<n;i++)for(ll j=0;j<m;j++){ll x;scanf("%lld",&x);if(x==0)dic[i]|=(1<<j);}dp[0][0]=1;for(ll i=0;i<n;i++){for(ll state=0;state<(1<<m);state++){for(ll nex=0;nex<(1<<m);nex++){if(judge1(nex) && (state&nex)==0 && (nex&dic[i])==0){dp[i+1][nex]+=dp[i][state];if(dp[i+1][nex]>=mod)dp[i+1][nex]-=mod;} }}}ll ans=0;for(ll state=0;state<(1<<m);state++){ans+=dp[n][state];if(ans>mod)ans-=mod;}printf("%lld\n",ans);
}


     

这篇关于bzoj 1725:Corn Fields牧场的安排的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160112

相关文章

2014假期学习安排和感触

马上放假了,终于有一大块清净的时间留给自己了,一年多的研究生生活感慨良多,有负能量的东西,但是更多的是积极的东西。非要说个最有意义的,我觉得是学会思考了吧,该去做什么,不该去做什么,这个东西是有帮助的,那个是在走弯路。我想我们更应该把握时间!   研二上学期的半年接触了不少东西,自己现在做的东西是和FPGA有关的,一开始对Verilog or VHDL根本就没接触过,更别说这个叫做FPGA的

【BZOJ】1324 Exca王者之剑 最大权独立集

传送门:【BZOJ】1324  Exca王者之剑 题目分析:赤裸裸的最大权独立集。。。最小割解决 代码如下: #include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int

【BZOJ】1026: [SCOI2009]windy数 数位DP

传送门:【BZOJ】1026: [SCOI2009]windy数 题目分析:数位DP水题。 代码如下: #include <stdio.h>#include <cstring>#include <algorithm>#define rep( i , a , b ) for ( int i = a ; i < b ; ++ i )#define For( i ,

【BZOJ】2152: 聪聪可可 点分治

传送门:【BZOJ】2152: 聪聪可可 题目分析:记录权值和%3的路径的个数。。。然后去重。。没了。。 代码如下: #include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std ;typedef lo

开发手札:关于项目管理中开发工作安排的问题

最近工作越来越偏向管理方向了(兼吗喽),所以仔细思考了一下给开发工作安排的问题。       结合自己开发过程中的体会,我觉得在构建完成用户需求文档的同时。       再站在开发的角度,构建一份详细的模块构架设计图就更好了,这样不仅可以给开发提供编码的思路和规范,也可以保证最终交付的代码大差不差,所以返工会减低很多。       前两天用processon画了两份系统的构架图。

[数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):16245 标注数量(xml文件个数):16245 标注数量(txt文件个数):16245 标注类别数:1 标注类别名称:["pig"] 每个类别标注的框数: pig 框数 = 28514 总框数:28514 使用标

Signed distance fields (SDFs) and Truncated Signed Distance Field(TSDF)

1. Signed distance fields (SDFs) 笔记来源: [1] Signed distance fields (SDFs) [2] Signed Distance Function (SDF): Implicit curves or surfaces [3] Ray Marching and Signed Distance Functions [4] Truncated S

动态规划--项目安排

题目来源:网易有道2013年校园招聘面试二面试题 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时间,假设做完每个项目后,拿到报酬都是不同的。由于小明马上就要硕士毕业了,面临着买房、买车、给女友买各种包包的鸭梨,但是他的钱包却空空如也,他需要足够的money来充实钱包。万能的网友麻烦你来帮帮小明,如何在最短时间内安排自己手中的项

【C++】1326. 需要安排几位师傅加工零件

问题:1326. 需要安排几位师傅加工零件 类型:贪心 题目描述: 某工厂有 n 个零件加工的师傅,每位师傅每天能够加工出不同数量的零件。 现有 m 个零件要求一天加工完,请问该工厂最少需要派几个师傅来完成这次零件加工任务,如果安排所有的师傅都参与加工也不能在一天内完成任务,请输出NO。 输入: 第一行有两个整数,用空格隔开; 第一个整数代表要加工的总零件个数 m (m≤10^6),

【POJ3254】Corn Fields

Corn Fields Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 8670 Accepted: 4622 Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12;