题解 \(by\;zj\varphi\)

发现 \(\rm n,m\) 都很小,考虑分行状压。

但是上一行和下一行的按钮状态会对当前行造成影响,所以再枚举一个上一行的按钮状态。

因为对于两行,只有如下三种情况是合法的

\[0\;1\;1\\
1\;1\;0
\]

所以总复杂度为 \(\mathcal O(n2^n3^n)\),最后统计答案时记得最后一行没有下一行来覆盖它,所以它自身的覆盖情况一定要覆盖全。

Code:
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?(-1):*p1++;
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=getchar();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=getchar();};
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
static const int N=11,INF=1061109567;
int dp[N][1<<N][1<<N],g[N][1<<N],vis[N],mo[N],n,m,ans=INT_MAX;
char s[N+2];
inline int main() {
//FI=freopen("nanfeng.in","r",stdin);
//FO=freopen("nanfeng.out","w",stdout);
read(n),read(m);
for (ri i(1);i<=n;p(i)) {
scanf("%s",s+1);
for (ri j(1);j<=m;p(j)) vis[i]|=(s[j]=='1')<<j-1;
}
int bs=(1<<m)-1;
for (ri i(1);i<=n;p(i)) {
for (ri j(1);j<=m;p(j)) read(mo[j]);
for (ri j(0);j<=bs;p(j)) {
ri tmp=0;
for (ri k(0);k<m;p(k)) if ((j>>k)&1) tmp+=mo[k+1];
g[i][j]=tmp;
}
}
memset(dp,0x3f,sizeof(dp));
memset(dp[0],0,sizeof(dp[0]));
for (ri i(0);i<=bs;p(i)) {
int tmp=vis[1]|((i<<1|i>>1)&bs)|i;
dp[1][tmp][i]=g[1][i];
}
for (ri i(1);i<n;p(i)) {
for (ri j(0);j<=bs;p(j)) {
for (ri l(0);l<=bs;p(l)) {
if ((l|j)!=bs) continue;
for (ri k(0);k<=bs;p(k)) {
if (dp[i][j][k]==INF) continue;
int tmp=vis[i+1]|k|((l<<1|l>>1)&bs)|l;
dp[i+1][tmp][l]=cmin(dp[i+1][tmp][l],dp[i][j][k]+g[i+1][l]);
}
}
}
}
for (ri i(0);i<=bs;p(i)) ans=cmin(ans,dp[n][bs][i]);
printf("%d\n",ans);
return 0;
}
}
int main() {return nanfeng::main();}

NOIP 模拟 $24\; \rm matrix$的更多相关文章

  1. NOIP 模拟 $24\; \rm block$

    题解 \(by\;zj\varphi\) 因为它要求大于它的且放在它前的数的个数要小于它的 \(key\) 值,所以先按 \(\rm val\) 值排序,然后按 \(\rm key\) 值排序,按顺序 ...

  2. NOIP 模拟 $24\; \rm graph$

    题解 \(by\;zj\varphi\) 首先一个点能否选择的条件是 \(dis_{1,x}+dis_{x,n}=dis_{1,n}\) 正解是计算一条道路上的所有为 \(-1\) 边的选择范围,是个 ...

  3. 2021.5.24考试总结 [NOIP模拟3]

    带着爆0的心态考的试,没想到整了个假rk2 (炸鱼大佬wtz忒强了OTZ T1 景区路线规划 这题对刚学完概率期望的我来说简直水爆了好吗.. 因为存在时间限制,不好跑高斯消元,就直接跑dp就完了. 令 ...

  4. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  5. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  6. NOIP模拟3

    期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...

  7. 7.22 NOIP模拟7

    又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...

  8. NOIP模拟 2

    大概就是考试的时候慌的一批,因为一道正解也没想出来,T1,T3只会暴搜,听见天皇在旁边的窃喜声本渣内心是崩溃的 会打暴搜的我先打了暴搜,大多数时间都用在第二题上,妄想自己能拿50多分- 最后半小时万念 ...

  9. 20190725 NOIP模拟8

    今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...

随机推荐

  1. ESP32非易失性存储整型数据笔记

    基于ESP-IDF4.1 1 #include <stdio.h> 2 #include "freertos/FreeRTOS.h" 3 #include " ...

  2. ESP-ADF相关学习笔记

    1.makefile:定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作 ...

  3. F5负载均衡_monitors(健康检查)

    故障现象: 后端有5台服务器,每个服务器上跑着8个应用.使用F5做应用负载调度.这40个应用里面,3-10个应用在高峰期的时候weblogic的DOS窗口显示与数据库断开连接(端口通.业务断),但是F ...

  4. C控制台程序 GUI程序

    控制台程序对应的工程类型为"Win32控制台程序(Win32 Console Application)",GUI 程序对应的工程类型为"Win32程序(Win32 App ...

  5. Guava Cache使用的三种姿势

    姿势一 使用expiredAferWriter 优点 简单 粗暴 缺点 同步阻塞问题:如果多个线程同时请求同一个过期的key,只有一个线程能够获得去加载缓存的锁,但是其他未获取加载缓存锁的线程也会阻塞 ...

  6. ubuntu18.04安装redis-desktop-manager

    通过proxychains4 clone项目,否则安装不成功 教程:https://www.cnblogs.com/bignode/p/9254500.html 1 git clone --recur ...

  7. 微信小程序云开发-数据库-商品列表数据跳过N条数据

    一.WXML实现 在wxml文件中添加对应链接,点击链接绑定事件skipGoods. 二.js实现 js文件中写skipGoods()函数,实现跳过2条数据的功能.

  8. MySQL8.0.26安装与卸载

    一.安装 1.官网下载 百度进入官网,学习用社区版够了,我下的是压缩版点这直达下载页 据说8.X版本性能优化,比5.7版本快2倍! 接着,不登录直接下载 2.创建配置 下载完后,建议解压到一个没有中文 ...

  9. NestJS WebSocket 开始使用

    使用NestJs提供WebSocket服务. 本文会在新建项目的基础上增加2个类 Gateway 实现业务逻辑的地方 WebSocketAdapter WebSocket适配器 新建项目 新建一个项目 ...

  10. Oracle19c 如何用rman duplicate 克隆一个数据库。(Active方式)

    Oracle19c 如何用rman duplicate 克隆一个数据库. 首先克隆有两种方法,一种是Backup-Based,一种是Active方式.官网文档链接https://docs.oracle ...