xdoj-1117(记忆化搜索+组合数学)
因为我是从上到下,所以就不叫动态规划而叫记忆化搜索吧
(不过运行时间只有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(记忆化搜索+组合数学)的更多相关文章
- 【10.31校内测试】【组合数学】【记忆化搜索/DP】【多起点多终点二进制拆位Spfa】
Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long usin ...
- [CSP-S模拟测试]:彩球问题(记忆化搜索)
题目传送门(内部题91) 输入格式 第一行一个正整数$N$,表示颜色种类数. 第二行$N$个正整数$k[i],k[i]$表示第$i$种颜色的数量$(1\leqslant k[i]\leqslant 3 ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- zoj 3644(dp + 记忆化搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...
- loj 1044(dp+记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
- HDU1978 记忆化搜索
How many ways Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
随机推荐
- Zookeeper面试题
Zookeeper是什么框架 分布式的.开源的分布式应用程序协调服务,原本是Hadoop.HBase的一个重要组件.它为分布式应用提供一致性服务的软件,包括:配置维护.域名服务.分布式同步.组服务等. ...
- 请问微信小程序let和var以及const有什么区别
在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循环同样可以使用. [JavaScript] 纯文 ...
- API服务网关(Zuul)
技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...
- chrome console 阻止 Navigated to
阻止如图 chrome 如图信息
- linux:scp从入门到刚入门
[温馨提示] 此文和ssh配合食用更佳. 首先请小伙伴们连上你要传文件的那台机,用ssh可以免密登录. [传送文件] 我们一般发文件的话可以scp来发一发,比如说我现在要向多个扔很多tomcat包,我 ...
- 數據庫ORACLE轉MYSQL存儲過程遇到的坑~(總結)
ORACLE數據庫轉MySQL數據庫遇到的坑 總結 最近在做Oracle轉mysql的工程,遇到的坑是真的多,尤其是存儲過程,以前都沒接觸過類似的知識,最近也差不多轉完了就總結一下.希望能幫到一些人( ...
- 第三组 通信一班 030 IPv6 RIPng (PT)
实验拓扑 地址规划 设备 接口 IPV6 地址/掩码 PC0 / 2001:DB8:30:2:201:42FF:FE8A:7688/64 PC1 / 2001:DB8:30:1:230:A3FF:F ...
- Lookaside
频繁申请和回收内存,会导致在内存上产生大量的内存碎片,从而导致最终无法申请内存.DDK提供了Lookaside结构来解决这个问题.可以将Lookaside结构想象成一个内存容器.在初始的时候,它先向W ...
- 杭电1004 ac code
#include <stdio.h> #include <string.h> #include <stdlib.h> #define STR_LEN 256 str ...
- AntPathMatcher做路径匹配
转发自: http://www.cnblogs.com/leftthen/p/5212221.html 需要看详细的请看上面的链接 这里以我这里的一个Filter 中需要对路径做例外处理,filter ...