poj3718 Facer's Chocolate Dream
正解:组合数+$dp$。
今天考试的题,考试的时候感觉自己有点脑残过头了。。
似乎发现了所有$1$其实都是一样的,然后不知道怎么强制每种物品只选一个。。
然后就写了一个所有物品可以选任意个的$dp$,尝试与答案找一找规律,并没有找到,看完$std$发现只要再加一个转移就能过了。。所以还是讲讲正解吧。。
首先所有$1$都是一样的,所以我们并不需要状压,直接开一个背包就行。
设$f[i][j]$表示用了$i$个物品,$1$的个数为$j$的方案数,注意这个是有序状态,即使用顺序不同方案也不同。
那么首先枚举当前这个物品让$1$的个数增加了多少,可能为$1,-1,3,-3$,这一步很容易转移。
然后我们之前的转移是枚举的任意物品,必然会算重,而算重的充要条件就是$i$与之前某一个物品是一样的。
我们先强制$i$与$i-1$是相同物品,那么我们可以用$i-2$的状态来转移到$i$,最后我们再乘一个$i-1$表示第$i-1$个物品实际上是可以插到前$i-1$个位置的任意一个的。
最后由于我们算的是排列,所以还要再除以一个$m!$。
通过这道题,我发现我还是太$naive$,见过的套路还是太少了,看来还是要深入学习各种计数的套路。。
#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define rhl (10007)
#define N (1005) using namespace std; int f[N][N],c[N][N],goal[N],n,m,st,fac; il int gi(){
RG int x=,q=; RG char ch=getchar();
while ((ch<'' || ch>'') && ch!='-') ch=getchar();
if (ch=='-') q=-,ch=getchar();
while (ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return q*x;
} il char gc(){
RG char ch=getchar();
while (ch!='' && ch!='') ch=getchar();
return ch;
} il int qpow(RG int a,RG int b){
RG int ans=;
while (b){
if (b&) ans=ans*a%rhl;
if (b>>=) a=a*a%rhl;
}
return ans;
} il void work(){
for (RG int i=;i<n;++i) goal[i]=; st=;
for (RG int i=;i<n;++i) goal[i]^=gc()=='';
for (RG int i=;i<n;++i) goal[i]^=gc()=='';
for (RG int i=;i<n;++i) st+=goal[i]; f[][st]=;
for (RG int i=(fac=);i<=m;fac=fac*(i++)%rhl)
for (RG int j=;j<=n;++j){
f[i][j]=;
if (j) f[i][j]=(1LL*c[j-][]*c[n-j+][]*f[i-][j-]+f[i][j])%rhl;
if (j<n) f[i][j]=(1LL*c[j+][]*c[n-j-][]*f[i-][j+]+f[i][j])%rhl;
if (j->=) f[i][j]=(c[n-j+][]*f[i-][j-]+f[i][j])%rhl;
if (j+<=n) f[i][j]=(c[j+][]*f[i-][j+]+f[i][j])%rhl;
if (i>) f[i][j]=(f[i][j]-1LL*(c[n][]-i+)*f[i-][j]*(i-))%rhl;
}
printf("%d\n",(f[m][]+rhl)*qpow(fac,rhl-)%rhl),f[][st]=; return;
} int main(){
#ifndef ONLINE_JUDGE
freopen("cho.in","r",stdin);
freopen("cho.out","w",stdout);
#endif
c[][]=;
for (RG int i=;i<=;++i){
c[i][]=c[i][i]=;
for (RG int j=;j<i;++j){
c[i][j]=c[i-][j-]+c[i-][j];
if (c[i][j]>=rhl) c[i][j]-=rhl;
}
}
while (scanf("%d%d",&n,&m)!=EOF && (n|m)) work();
return ;
}
poj3718 Facer's Chocolate Dream的更多相关文章
- 【poj3718】 Facer's Chocolate Dream
http://poj.org/problem?id=3718 (题目链接) 题意 给出${2}$个长度为${n}$的${01}$串,问是否存在${m}$个长度为${n}$的有三个位置为${1}$的$0 ...
- PK淘宝BUY+,京东推出AR购物应用JD Dream
今年双十一淘宝推出了虚拟现实VR购物"BUY+",用户可以在虚拟环境中选购商品.那作为竞争对手的京东将使出什么绝招呢?在近日上海举办的谷歌开发者大会上得到了答案.会上京东推 ...
- [poj2411] Mondriaan's Dream (状压DP)
状压DP Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One nigh ...
- Dream It Possible
反复听着Dream It Possible,想起自己的华为岁月,百感交集!
- POJ 题目2411 Mondriaan's Dream(状压DP)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 13519 Accepted: 787 ...
- 第一篇英文短文《It All Starts With A Dream》
http://www.ximalaya.com/#/17209107/sound/6883165 Dreaming. Do you or don’t you? Do you dream about t ...
- POJ 2411 Mondriaan's Dream
状压DP Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 9938 Accepted: 575 ...
- Big Chocolate
Big Chocolate 题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=19127 Big Chocolat ...
- Dividing a Chocolate(zoj 2705)
Dividing a Chocolate zoj 2705 递推,找规律的题目: 具体思路见:http://blog.csdn.net/u010770930/article/details/97693 ...
随机推荐
- DateTime compare
DateTime t1 = new DateTime(100); DateTime t2 = new DateTime(20); if (DateTime.Compare(t1, t2) > 0 ...
- PHP调用百度api生成短网址&根据短网址恢复长网址
接口api文档地址:http://dwz.cn/#/apidoc?_k=i9ev5p 代码demo header("Content-type: text/html; charset=utf- ...
- python爬虫实战(七)--------伯乐在线文章(模版)
相关代码已经修改调试成功----2017-4-21 一.说明 1.目标网址:伯乐在线 2.实现:如图字段的爬取 3.数据:存放在百度网盘,有需要的可以拿取 链接:http://pan.baidu.co ...
- flash builder注释字体看不清
window-preferences-flex-editiors-syntex coloring-ActionScript-Comment (窗口-首选项-flashbuilder-编辑器-语法着色- ...
- WPF 用户控件嵌入网页
WPF使用用户控件嵌入网页,直接使用WebBrowser或Frame会产生报错,报错信息如下: 1.使用WebBrowser,<WebBrowser Source="http://19 ...
- C# 之构造函数
构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化. 构造函数具有一些特殊的性质: (1)构造函数的名字必须与类同名; (2)构造函数没有返回类型,它可以带参数,也可以不 ...
- FE面试题库
一.HTML 序号 面试题目 难度等级 回答要点 H1 简述编写HTML需要注意哪些事项? ☆ DOCTYPE.charset.viewport.语义化.CSS与JS的位置.DOM层级.结构样式行为的 ...
- 【转载】2012年七个免费ASP空间分享-支持ASP、ASP.NET的空间
文章目录 Azure空间 Appharbor 7host空间 Brinkster Jabry空间 总结后的话 这篇免费ASP空间的总结文章本来标题已经拟好了是:2012年十大免费ASP空间分享,但是当 ...
- SOA(面向服务架构)——踩坑后反思:这样值得吗?
SOA(面向服务架构)——踩坑后反思:这样值得吗?
- [PHP] 通用网关接口CGI 的运行原理
CGI 的运行原理:1.客户端访问某个 URL 地址之后,通过 GET/POST/PUT 等方式提交数据,并通过 HTTP 协议向 Web 服务器发出请求.2.服务器端的 HTTP Daemon(守护 ...