题解 \(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();}

最新文章

  1. CSV导入
  2. AEAI Portlet开发心得
  3. Trasformation中的公式报错误,错误数据行定位
  4. tomcat 清理日志
  5. 使用cnblogs.com的用户体验和提出来的建议
  6. asp.net获取当前页面文件名,参数,域名等方法。统一session验证和权限验证的方法
  7. Submission
  8. java泛型小问题
  9. 利用dfs解决规定路程问题
  10. plink计算两个SNP位点的连锁不平衡值(LD)
  11. Django 【认证系统】auth
  12. PropertiesUtil
  13. bind(port)与.localAddress(new InetSocketAddress(port))区别
  14. 【jmeter】jmeter 压力测试
  15. laravel通过Eloquent ORM实现CURD
  16. mysql 试图
  17. commons-logging.jar 和 log4j.jar 的关系
  18. Spring Boot整合RabbitMQ详细教程
  19. Qt 利用XML文档,写一个程序集合 一
  20. [AHOI2012]树屋阶梯 题解(卡特兰数)

热门文章

  1. OSI与TCP/IP各层的结构与功能,都有哪些协议?
  2. 不安装任何软件或脚本使用powershell快速计算文件的MD5/SHA1/SHA256等校验值
  3. Redis的结构和运作机制
  4. VRRP概述作用及配置
  5. SECURECRT 连接锐捷交换机CONSOLE
  6. windows使用nvm管理node不同版本
  7. [考试总结]noip模拟14
  8. C++第四十一篇 -- 安装成功的第一个驱动文件
  9. (Ooencv3)颜色空间转换
  10. vue源码解析之observe