因为我是从上到下,所以就不叫动态规划而叫记忆化搜索吧

(不过运行时间只有3ms....应该是很不错的吧)

排版怎么那么难看。。。编辑的时候不是这样子的啊?!

思想 : 大眼一看应该是一道很裸的状压dp; 状态为填完每一列 每行%2的值 ; 状态的改变用异或就可以啦

我不是很会状压。。。有一个想法------状态是无序的 【我们只需要两个值】

k0(0的个数),k1(1的个数)来描述状态就可以啦。。

  1)状态描述:f[x][k0][k1]   在【1~(x-1)】列填好基础上填满整个方格

   要求填满方格之后 每行panda个数(从x列开始)%2==0个数为k0 ; ==1个数为k1

2) 状态转移:每列要求填a[i]个,a[i]个怎么分配呢?

         要求为0的方格填k个,要求为1的方格填a[i]-k;      

//状态转移
LL ans=;
for (int i=;i<=a[t];i++) {//有i个数放在了0的位置
if ( i<=k0 ) {
int t1=k0-i*+a[t]; //t1=k0-i+a[i]-0 0填一个表情变成1 1填一个变成0
int t2=k1+*i-a[t];
if (f[t+][t1][t2]<) //记忆化搜索
f[t+][t1][t2]=dfs (t1,t2,t+,sum-a[t]);
ans=( ans+C(k0,i)*C(k1,a[t]-i)%mod*f[t+][t1][t2]%mod )%mod;// c(k0,i)--》 从k0个位置选i个位置
}
}

3) 有个小优化的彩蛋哦。。。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=+;
const int mod=1e9+;
int a[N];
int n,m;
int cnt;
LL f[][][];
LL b[][];
LL C (int x, int y) {
if (y==) return ;
if (x-y<y) y=x-y;
if (b[x][y]) return b[x][y];
LL sum=;
LL k=;
for (int i=x-y+;i<=x;i++)
sum=sum*i/(k++);
b[x][y]=sum;
return sum;
}
LL dfs (int k0,int k1,int t,int sum) {
if (t==m) {
if (k1==a[t]) return ;
return ;
}
if (sum%!=k1%) return ;// 优化。。想想为什么呢?!
LL ans=;
for (int i=;i<=a[t];i++) {
if ( i<=k0 ) {
int t1=k0-i*+a[t];
int t2=k1+*i-a[t];
if (f[t+][t1][t2]<)
f[t+][t1][t2]=dfs (t1,t2,t+,sum-a[t]);
ans=( ans+C(k0,i)*C(k1,a[t]-i)%mod*f[t+][t1][t2]%mod )%mod;
}
}
return ans;
}
int main ()
{
while (~scanf ("%d %d",&n,&m)) {
int k0,k1;
memset (f,-,sizeof(f));
k1=k0=;
int sum=;
for (int i=;i<=m;i++) {
scanf ("%d",&a[i]);
sum+=a[i];
}
for (int i=;i<=n;i++) {
int x; scanf ("%d",&x);
if (x) k1++;
else k0++;
}
LL ans=dfs (k0,k1,,sum);
printf ("%lld\n",ans);
}
return ;
}

        

1117: Insert Orz Pandas

时间限制: 2 Sec  内存限制: 128 MB
提交: 32  解决: 12
[提交][状态][讨论版]

题目描述

Orz panda emotion is a famous emotion in XDU/ACM-ICPC QQ groups.
Big Big Xi loves to create new Orz panda emotions.
Now he has a matrix with n lines and m columns,form n*m cells.
And he wants to insert some small Orz pandas to this matrix to create a big emotion.
In each cell of the matrix,he will determine whether put a small Orz panda or not.
For some reasons,he has some special needs of the emotions:
1.In the ith column,there must be a[i] small Orz pandas. (1<=i<=m)
2.In the ith line,assume the total number of Orz pandas is x, x mod 2 must be b[i]. (1<=i<=n)
For example, if n=2 and m=3,a[1..3]={1,1,1},b[1..2]={1,0}

Now, Big Big Xi wants to know there are how many adapted ways to insert the pandas.

 

输入

There are multiple test cases (no more than 100,and no more than 10 test cases with large n and m), please process to EOF.

In each test case,there are two numbers N and M at the first line.(0<n<=10, 0<m<=100)

Then m lines, the ith line has a number indicates a[i].

And then n lines,the ith line has a number indicates b[i].

输出

One number which is the answer of the question (mod by 1e9+7)

样例输入

1 1
1
1
2 3
1
1
1
1
0

样例输出

1
4

xdoj-1117(记忆化搜索+组合数学)的更多相关文章

  1. 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】

    Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...

  2. [CSP-S模拟测试]:彩球问题(记忆化搜索)

    题目传送门(内部题91) 输入格式 第一行一个正整数$N$,表示颜色种类数. 第二行$N$个正整数$k[i],k[i]$表示第$i$种颜色的数量$(1\leqslant k[i]\leqslant 3 ...

  3. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  4. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  5. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  6. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  7. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

  8. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  9. HDU1978 记忆化搜索

    How many ways Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

随机推荐

  1. Apache支持TRACE请求漏洞处理方案

    trace和get一样是http的一种请求方法,该方法的作用是回显收到的客户端请求,一般用于测试服务器运行状态是否正常. 该方法结合浏览器漏洞可能造成跨站脚本攻击.修复方法如下: 编缉/etc/htt ...

  2. isScroll 插件在iPhone 5s 和以上版本

    才加入这个移动项目组三天,解决一个同事(请假),解决一个切换头部tab 选型时,下拉数据,再次切换到另外一个选项时,出现滚动条距离顶部有些距离,当频繁操作会出现距离顶部距离加大问题(第二天衍生出其他b ...

  3. 怎样判断JS对象中的属性

    // 如何在不访问属性值的情况下判断对象中是否存在这个属性 var obj = { a: 2 }; Object.defineProperty( obj, 'b', // 让 b 不可枚举 { enu ...

  4. 快递小哥逆袭自传:用了6年时间做到了IT部门主管

    在我30岁生日那天,终于收到升职的通知,自己如愿的也从一名小小程序员升职成为IT主管,负责公司硬件设备驱动程序开发项目,工资也从原来月薪10K变到现在月薪20K.或许对于很多人而言,在三十岁的时候,可 ...

  5. day5-python数据类型

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  6. 使用DDMS查看设备内的文件系统

    system文件系统存储了一些系统相关的文件 system/app里面是系统自带的应用程序 system/fonts里面存放的是系统自带的字体 system/frameworks里面存放的是系统的一些 ...

  7. 每天CSS学习之text-align

    text-align是CSS的一个属性,其作用是设置文本的对齐方式.其值如下所示: 1.left:文本左对齐.如下所示: div{ text-align:left; } 结果: 2.right:文本右 ...

  8. vue-router-5-命名路由

    创建 Router 实例的时候,在 routes 配置中给某个路由设置名称 const router = new VueRouter({ routes: [ { path: '/user/:userI ...

  9. μC/OS-II在Microblaze上的移植与使用专题--“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品

    reference:http://xilinx.eetrend.com/d6-xilinx/blog/2010-05/682.html   随着集成电路设计与制造技术的发展,FPGA芯片的容量越来越大 ...

  10. Java实验2

    1.给定一组字符,编程输出里面数值最大者. package experiment; import java.util.Arrays; public class ShenYue { public sta ...