首页 > 其他分享 >[USACO06NOV] Corn Fields G

[USACO06NOV] Corn Fields G

时间:2024-12-16 22:20:20浏览次数:3  
标签:13 Fields Corn 牧场 土地 USACO06NOV John ll dp

题目

Description

农场主 John 新买了一块长方形的新牧场,这块牧场被划分成 M 行 N列 (1≤M≤12,1≤N≤12),每一格都是一块正方形的土地。 John 打算在牧场上的某几格里种上美味的草,供他的奶牛们享用。

遗憾的是,有些土地相当贫瘠,不能用来种草。并且,奶牛们喜欢独占一块草地的感觉,于是 John 不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边。

John 想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择?(当然,把新牧场完全荒废也是一种方案)

Input

第一行:两个整数 M 和 N,用空格隔开。

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

Output

一个整数,即牧场分配总方案数除以 100,000,000的余数。

Sample Input

2 3
1 1 1
0 1 0

Sample Output

9

思路

一道状压$dp$题;

用$dp[i][k]$表示第$i$行的种植状态$k$;

把不符合种植条件的状态去掉;

再枚举上一行的状态;

若两行状态没有相邻种植,$dp[i][k]$ 加上上一行方案再取模即可;

 


 

代码

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll _=13;
ll n,m;
ll a[13][13],dp[13][1<<12];
int main()
{
    scanf("%lld%lld",&n,&m);
    for(ll i=1;i<=n;i++)
    for(ll j=1;j<=m;j++)
        scanf("%lld",&a[i][j]);
    dp[0][0]=1;
    for(ll i=1;i<=n;i++)
    for(ll k=0;k<=(1<<m)-1;k++)
    {
        ll flag=0;
        for(ll j=1;j<m;j++)
        if(k&(1<<(j-1))&&k&(1<<j))//不能相邻种植
        {
            flag=1;
            break;
        }
        for(ll j=1;j<=m;j++)
        if(a[i][j]==0&&k&(1<<(j-1)))//只能在肥沃的土地上种植
        {
            flag=1;
            break;
        }
        if(flag) continue;
        for(ll l=0;l<=(1<<m)-1;l++)
        if(!(k&l))//与上一行状态没有相邻种植
            dp[i][k]=(dp[i][k]+dp[i-1][l])%100000000;//加上方案
    }
    ll ans=0;
    for(ll i=0;i<=(1<<m)-1;i++)
        ans=(ans+dp[n][i])%100000000;
    printf("%lld",ans);
    return 0;
}

 

 

 

标签:13,Fields,Corn,牧场,土地,USACO06NOV,John,ll,dp
From: https://www.cnblogs.com/wzx-RS-STHN/p/18611234

相关文章

  • 记一次unicorn半自动化逆向——还原某东sign算法
    分析准备集成so文件为了方便分析和调试,我选择了主动集成生成sign的so文件到自己写的apk中,然后主动调用。可能是gradle版本的问题,搜索到的文章大都无效,踩坑十分多。其实配置很简单,在src/main/目录下建立jniLibs/armeabi-v7a/目录,把so文件放在里面。然后配置好build.gradle......
  • cornerstone中raft_server_resp_handlers源码解析
    1.概述在rpc请求里,有了请求req就必然有回复resp。本文就来解析发送req的节点收到resp该怎么处理。2.handle_peer_resp源码解析voidraft_server::handle_peer_resp(ptr<resp_msg>&resp,constptr<rpc_exception>&err){if(err){l_->info(sstrfmt("peer......
  • cornerstone中raft_server_req_handlers源码解析
    1.概述之前说过raft_server是cornerstone的核心,其中充满了很多req的发送,那么follower收到leader的req会怎么处理呢?本文就是来解析cornerstone中处理req的源码。2.process_req源码解析ptr<resp_msg>raft_server::process_req(req_msg&req){ptr<resp_msg>resp;l_-......
  • cornerstone中raft_server源码解析
    1.概述cornerstone中核心即为raft_server的实现。在raft里面有follower,leader,candidate三种角色,且角色身份还可以相互切换。写三个类follower,leader,candidate显得没必要,因为三个类可以共享许多成员变量,如term,log_store等等。因此在cornerstone中抽象出raft_server这一个类,而raf......
  • flask服务通过gunicorn启动
    使用Gunicorn启动Flask服务通常可以提升Flask应用的性能。以下是通过Gunicorn启动Flask服务的步骤:1.安装依赖首先,确保已安装Flask和Gunicorn:pipinstallflaskgunicorn2.创建Flask应用创建一个简单的Flask应用,例如app.py:fromflaskimportFlas......
  • Django+nginx+gunicorn搭建服务器后台
    @[toc]本文以系统镜像选择Ubuntu18.04的阿里云轻量应用服务器为例,使用Stacklens的开源项目远程连接服务器使用MobaXtermSSH连接阿里云服务器,根据提示输入账号和密码,进入成功后便可看到阿里云的欢迎界面。部署到服务器后就不能使用Django自带的后台服务器了,而是选择使用Nginx和Gun......
  • PCIe进阶之TL:Common Packet Header Fields & TLPs with Data Payloads Rules
    1TransactionLayerProtocol-PacketDefinitionTLP有四种事务类型:Memory、I/O、Configuration和Messages,两种地址格式:32bit和64bit。构成TLP时,所有标记为Reserved的字段(有时缩写为R)都必须全为0。接收者Rx必须忽略此字段中的值,PCIeSwitch必须对其进行原封不......
  • 为什么先进工艺需要check那么多corner?
      越先进的工艺,其制造生产是偏差也越大。所以导致了了很多corner的产生。如RCcorner有最基础的rcworst、cworst、rcbes和cbest情况。有的foundry还会对rc的取值范围进行了约束,如cworst_T,采用的是1.5sigma的取值范围。    此外,工艺越先进,mos管的工作电压也会随之降低......
  • gunicorn 日志设置
    命令行模式gunicorn-w4-b0.0.0.0:8000--access-logfileaccess.log--error-logfileerror.loglogleveldebug配置文件gunicorn.conf#gunicorn.conf#并行工作进程数workers=4#指定每个工作者的线程数threads=2#监听内网端口5000bind='127.0.0.1:5000......
  • OpenCV(cv::findChessboardCorners())
    目录1.函数原型2.使用场景3.工作原理4.示例4.1角点精细化4.2附加标志5.注意事项cv::findChessboardCorners()是OpenCV提供的一个函数,常用于计算机视觉中的棋盘图像角点检测,特别是相机标定(calibration)和三维重建相关的任务中。1.函数原型boolcv::findChessboard......