题目链接


Solution

状压 \(dp\) .

\(f[i][j][k]\) 代表前 \(i\) 列中 , 已经安置 \(j\) 块草皮,且最后一位状态为 \(k\) .

同时多记录一个每一列中的不能放的位置 \(w[i]\).

然后就可以很轻松的转移了...

转移方程看代码.

Code

#include<bits/stdc++.h>
#define ll long long
using namespace std; ll f[13][145][10000],n,K;
ll js[10000],m,sum,ans,w[14]; int main()
{
cin>>n>>m;
sum=(1<<m)-1; for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
int x; cin>>x;
K+=x;
w[i]=w[i]*2+x^1;
}
for(ll i=0;i<=sum;i++)
for(ll j=0;j<m;j++)
if(i&(1<<j))js[i]++; for(ll i=0;i<=sum;i++)
{
if((i<<1&i))continue;
if((i&w[1]))continue;
f[1][js[i]][i]=1;
}
for(ll i=1;i<n;i++)
for(ll j=0;j<=K;j++)
for(ll k=0;k<=sum;k++)
{
if(!f[i][j][k])continue;
for(ll kk=0;kk<=sum;kk++)
{
if(kk&w[i+1])continue;
if((k&kk)||(kk<<1&kk))continue;
if(j+js[kk]>K)continue;
f[i+1][j+js[kk]][kk]+=f[i][j][k];
}
}
for(int j=0;j<=K;j++)
for(ll i=0;i<=sum;i++)
ans+=f[n][j][i];
cout<<ans%100000000<<endl;
}

最新文章

  1. Handler类、异步线程和Message类的参数传递
  2. VMware网络设置
  3. Win7家庭版包“已停止工作”
  4. [Java] java中的异常处理-续
  5. What is the difference between differed processing mode and interactive mode?
  6. centos6.3编译安装Apache2.4.3+PHP5.4.8+Mysql5.5.8
  7. QT 线程暂停,继续执行的一种实现(有些道理,而且封装了)
  8. ON UPDATE CURRENT_TIMESTAMP
  9. 爬虫实现:根据IP地址反查域名
  10. Python自动化测试用例设计--测试类型
  11. IAAS、SAAS 和 PAAS 的区别、理解
  12. String的方法capitalize
  13. c#dev操作读取excel方法
  14. [转]什么是C++虚函数、虚函数的作用和使用方法
  15. 课后作业week 5 —— 两款修图软件优势及创新分析
  16. XP下安装Centos 6.4 双系统 :Linux系统分区及挂载点,关键引导程序启动设置
  17. LeetCode - Customers Who Never Order
  18. Oracle GoldenGate 四、数据过滤和数据项匹配
  19. 二&#183;、spring成长之路——委派设计模式和单例设计模式
  20. 登陆Oracle11g的企业管理器

热门文章

  1. 《JSON笔记之二》----封装JSONUtil
  2. php数据加密及数据存储和传输
  3. MLT教程:从BXL文件导入Altium Designer原理图封装和PCB封装
  4. [USACO5.1]夜空繁星Starry Night
  5. 准备篇(二)C语言
  6. PHP.34-TP框架商城应用实例-后台10-商品分类-需求分析、创建无限级商品分类,递归
  7. JSP---JSTL核心标签库的使用
  8. (A)eclipse搭建springboot项目入门
  9. Java的接口和抽象类深入理解
  10. iOS 引用外部静态库(.a文件)时或打包.a时,Category方法无法调用。崩溃