Luogu P1879 [USACO06NOV]玉米田Corn Fields

2023-11-05 14:32

本文主要是介绍Luogu P1879 [USACO06NOV]玉米田Corn Fields,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

P1879 [USACO06NOV]玉米田Corn Fields

分析

状压DP入门题目。
数据规模非常小,非常适合用状压DP。

  • 首先把每一行的情况压成一个二进制数,1表示选,0表示不选;
    设f[i][j]表示到计算了前i行,第i行状态为j;
  • 枚举上一行所有可能的状态,按行转移;
    那么状态转移方程显然为: f[i][j]+=f[i1][k]modP f [ i ] [ j ] + = f [ i − 1 ] [ k ] m o d P
  • 枚举每一行状态时需要判断,本行之内没有相邻的格子被选中,上一行与本行之间也没有相邻的格子被选中。
  • 因此需要通过此行状态向左右各移一位产生的状态,与此行状态&一下,如果有某个位置是1,说明此行状态有相邻的1,则当前状态不可行, continue c o n t i n u e
  • 也需要用本行与上一行&一下,原理同上; 值得注意的是,只有题目输入中的1格才可能被选,所以当前的状态需要满足:
  • 可以将此行当前状态与输入状态&一下,如果结果不是当前状态,说明有某一位置,当前状态为1但输入状态为0,不合法。
  • 最后的答案是:枚举最后一行所有状态,只要当前状态有答案,那么必为合法状态,直接累加。

代码

#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=13,P=100000000;
int s[maxn],f[maxn][1<<maxn];
int n,m,ans;bool judge(int i,int j,int k)
{if((j&(j<<1))||(j&(j>>1)))  return false;if(j&k)                     return false;if((j&s[i])!=j)             return false;return true;
} int main()
{scanf("%d%d",&n,&m);f[0][0]=1;for(int i=1,x;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&x),s[i]=(s[i]<<1)|x;for(int i=1;i<=n;i++)for(int j=0;j<(1<<m);j++)for(int k=0;k<(1<<m);k++)if(judge(i,j,k))f[i][j]=(f[i][j]%P+f[i-1][k]%P)%P;for(int i=0;i<(1<<m);i++)ans=(ans%P+f[n][i]%P)%P;printf("%d",ans);return 0;
}

这篇关于Luogu P1879 [USACO06NOV]玉米田Corn Fields的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

FHQ Treap模版(luogu P3369)

FHQ Treap模版(自用),带注释 #include<bits/stdc++.h>using namespace std;const int N=1e5+10;int n,root,idx;struct node{int l,r;int val,key,size;}tr[N];int getnew(int v){tr[++idx].val=v;//权值tr[idx].key=rand(

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

【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;

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 精读

1 传统视图合成和NeRF(Neural Radiance Fields) 1.1 联系 传统视图合成和NeRF的共同目标都是从已有的视角图像中生成新的视角图像。两者都利用已有的多视角图像数据来预测或合成从未见过的视角。 1.2 区别 1.2.1 几何表示方式 传统视图合成:通常使用显式几何模型(如深度图、网格、点云)或其他图像处理方法(如基于图像拼接或光流的方法)来生成新的视图。这些

corn表达式规则

cron的表达式被用来配置CronTrigger实例。 cron的表达式是字符串,实际上是由七子表达式,描述个别细节的时间表。这些子表达式是分开的空白,代表: 1. Seconds 2. Minutes 3. Hours 4. Day-of-Month 5. Month 6. Day-of-Week 7. Year (可选字段) 例 "0 0 12 ? * WED" 在每星期三下午

poj3254--Corn Fields(状压dp)

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

POJ 3083Children of the Candy Corn(DFS*2+BFS)

题目地址:http://poj.org/problem?id=3083 这道题整体思路并不难,但一些细节方面有点难想。。主要是容易写的太麻烦,太乱。。虽然我的代码也比较长,但是思路还是挺清晰的(基本就是把上一段的复制下来稍微改改。。)。但是有些细节方面一开始想错了,导致调试了很长时间。主要思路是记录4个方向然后改变方向走。 题目意思是输出往左绕的步数与往右绕的步数,还有最短步数。前两个用DFS

NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 翻译

NeRF:将场景表示为用于视图合成的神经辐射场 引言。我们提出了一种方法,该方法通过使用稀疏的输入视图集优化底层连续体场景函数来实现用于合成复杂场景的新视图的最新结果。我们的算法使用全连通(非卷积)深度网络来表示场景,其输入是单个连续的5D坐标(空间位置(x,y,z)和观察方向(θ,φ)),其输出是该空间位置处的体积密度和与观察相关的发射辐射。我们通过查询沿着相机光线的5D坐标来合成视图,并使用

LUOGU P2048 [NOI2010] 超级钢琴(贪心+堆)

原题链接:[NOI2010] 超级钢琴 题目大意: 给出一个长度为 n n n 的数组,且 a i a_{i} ai​ 可正可负,再给出三个数字 k , L , R k,L,R k,L,R 。 定义每个子数组的价值为其所有元素的和,你需要找到 k k k 个连续的子数组(可重叠但不可重复),且满足长度在 [ L , R ] [L,R] [L,R] 内,问你最后这 k k

每日一题~abc 367 F+luogu p10102(随机算法)

随机化的思想: 充分条件的计算代价比较大,想找个计算代价小的必要条件,但必要条件可能会出错,然后通过一些手段(比如随机映射)把这个出错的概率降低。(参考园子) 添加链接描述 题意: 两个数组,元素均为 1~N. q 次查询,判断 a b 数组,这一区间内的元素是否相同。(排列的顺序不重要,主要是元素的种类个数相同) n,q 均在2e5 内。 如果暴力,对每次查询,我们只能将这个区间内的所有数扫一