2014 Super Training #8 C An Easy Game --DP
原题:ZOJ 3791 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3791
题意:给定两个0-1序列s1, s2,操作t次,每次改变m个位置,求把s1改变为s2的方法总数。
解法:
DP,s1和s2哪些位置相同并不重要,重要的是有几个位置不同。改变的时候也一样,改变哪些位置并不重要,重要的是改变之后有几个位置不同。当时就想到了这一点,后面就不知道怎么办了。
定义: dp[i][j]表示i次操作之后有j个位置不同的方法数,答案就是dp[k][0]。
对于dp[i-1][j],经过一次操作之后假设把x个位置从不同变为相同,剩下m-x个位置从相同变为不同,那么转移方程:
dp[i][j+m-x-x] += dp[i-1][j] * C(j, x) * C(n-j, m-x)
其中C(j, k)表示组合数,即从j个不同的位置选出k个改变。循环x即可。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#define Mod 1000000009
#define ll long long
using namespace std;
#define N 107 int c[N][N];
ll dp[N][N]; void calc_C()
{
memset(c,,sizeof(c));
c[][] = ;
for(int i=;i<=;i++)
{
c[i][] = ;
for(int j=;j<=i;j++)
c[i][j] = (c[i-][j-] + c[i-][j])%Mod;
}
} int main()
{
int n,s,m;
int dif,i,j,k;
string a,b;
calc_C();
while(scanf("%d%d%d",&n,&s,&m)!=EOF)
{
cin>>a>>b;
dif = ;
for(i=;i<n;i++)
if(a[i] != b[i])
dif++;
memset(dp,,sizeof(dp));
dp[][dif] = ;
for(i=;i<=s;i++)
{
for(j=;j<=n;j++)
{
for(k=max(,m-n+j);k<=j&&k<=m;k++)
{
dp[i][j+m-k-k] += ((dp[i-][j]*c[j][k])%Mod)*c[n-j][m-k]%Mod;
dp[i][j+m-k-k] %= Mod;
}
}
}
printf("%lld\n",dp[s][]);
}
return ;
}
2014 Super Training #8 C An Easy Game --DP的更多相关文章
- 2014 Super Training #7 C Diablo III --背包问题(DP)
		原题: ZOJ 3769 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3769 一个带有一些限制的背包问题. 假设在没有限 ... 
- 2014 Super Training #10 D 花生的序列 --DP
		原题: FZU 2170 http://acm.fzu.edu.cn/problem.php?pid=2170 这题确实是当时没读懂题目,连样例都没想通,所以没做了,所以还是感觉这样散漫的做不好,有些 ... 
- 2014 Super Training #1 B Fix 状压DP
		原题: HDU 3362 http://acm.hdu.edu.cn/showproblem.php?pid=3362 开始准备贪心搞,结果发现太难了,一直都没做出来.后来才知道要用状压DP. 题意: ... 
- 2014 Super Training #8 B Consecutive Blocks --排序+贪心
		当时不知道怎么下手,后来一看原来就是排个序然后乱搞就行了. 解法不想写了,可见:http://blog.csdn.net/u013368721/article/details/28071241 其实就 ... 
- 2014 Super Training #8 A Gears --并查集
		题意: 有N个齿轮,三种操作1.操作L x y:把齿轮x,y链接,若x,y已经属于某个齿轮组中,则这两组也会合并.2.操作Q x y:询问x,y旋转方向是否相同(等价于齿轮x,y的相对距离的奇偶性). ... 
- 2014 Super Training #9 E Destroy --树的直径+树形DP
		原题: ZOJ 3684 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3684 题意: 给你一棵树,树的根是树的中心(到其 ... 
- 2014 Super Training #9 C E - Cup 2 --记忆化搜索
		原题:ZOJ 3681 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3681 题意:给一个m,n,m表示m个人,可以把m个 ... 
- 2014 Super Training #6 H Edward's Cola Plan --排序+二分
		原题: ZOJ 3676 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3676 题意:给每个朋友一瓶可乐,可乐有普通和高 ... 
- 2014 Super Training #7 F Power of Fibonacci --数学+逆元+快速幂
		原题:ZOJ 3774 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3774 --------------------- ... 
随机推荐
- mongodb学习5--mongo的type类型
			db.active.group({key:{id:1},cond:{cd:20160913,cid:"fgsdljsdv",aid:"54465"},reduc ... 
- java入门基础知识点总结
			JavaScript他是一种描述性语言,其实他并不难学,只要用心学,一定会学好,我相信大家在看这篇文章的时候,一定也学过HTML吧,使用JavaScript就是为了能和网页有更好的交互,下面切入主题. ... 
- 伏羲八卦、文王六十四卦、老子阴阳太极、西方哲学辩证与"解耦和复用”思想的异曲同工之妙
			伏羲八卦.文王六十四卦.老子阴阳太极.西方哲学辩证与"解耦和复用”思想的异曲同工之妙 问题:任何程序语言在遇到复杂逻辑时,代码维护难度就会加大,如何处理该问题? 答案:重构,模块化. ... 
- [Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考、NuGet组件参考
			[Xamarin.iOS] Visual Studio中Xamarin.iOS项目,无法加入PCL项目参考.NuGet组件参考 解决方案 目前Visual Studio中最新版本的Xamarin.iO ... 
- [Tool] 使用StyleCop验证命名规则
			[Tool] 使用StyleCop验证命名规则 前言 微软的MSDN上,有提供了一份微软的命名方针,指引开发人员去建立风格一致的程序代码. http://msdn.microsoft.com/zh-t ... 
- [译] 第三十天:Play Framework - Java开发者梦寐以求的框架 - 百花宫
			前言 30天挑战的最后一天,我决定学习 Play Framework .我本来想写Sacla,但是研究几个小时后,我发现没法在一天内公正评价Scala,下个月花些时间来了解并分享经验.本文我们先来看看 ... 
- Css 学习——left与offsetLeft的区别
			1. 首先一个标签元素的left属性是一个string类型,而offsetLeft是一个numberle类型. 求证: <script> window.onload = function( ... 
- copy 和 strong(或retain)的区别
			http://stackoverflow.com/questions/18526909/whether-i-should-use-propertynonatomic-copy-or-propertyn ... 
- 21分钟 MySQL 入门教程
			目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数据类型 五.使用MySQL数据库 ... 
- 这些git技能够你用一年了
			用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回复交流. git设置关闭自动换行 git config ... 
