思路:dp+记忆化搜索,设dp[n][m]表示s1与s2不同字符个数为n,还需要变m步的方法数,那么:

dp[n][m]  = (c[n][i]*c[N-n][K-i]) * dp[n-i+(K-i)][m-1]  (i需满足数组下标不小0)。c数组表示组合数。

#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MOD 1000000009
const int MAXN = 101;
using namespace std;
long long int dp[MAXN][MAXN], c[MAXN][MAXN], N, M, K;
void init(){
c[0][0] = 1, c[1][0] = 1, c[1][1] = 1;
for(int i = 2; i < MAXN; i ++){
c[i][0] = 1;
for(int j = 1; j <= i; j ++){
c[i][j] = c[i-1][j-1] + c[i-1][j];
if(c[i][j] >= MOD) c[i][j] %= MOD;
}
}
}
int dfs(int n, int m){
if(dp[n][m] != -1) return dp[n][m];
if(m == 0) return dp[n][m] = (n == 0);
dp[n][m] = 0;
for(int i = 0; i <= K; i ++){
if(n < i || N - n < K - i) continue;
dp[n][m] += (((c[n][i] * c[N-n][K-i]) % MOD) * dfs(n - i + (K - i), m-1))%MOD;
dp[n][m] %= MOD;
}
return dp[n][m];
}
int main(){
string s1, s2;
init();
while(cin >> N >> M >> K){
cin >> s1 >> s2;
int cnt = 0;
for(int i = 0; i < N; i ++)
if(s1[i] != s2[i]) cnt ++;
memset(dp, -1, sizeof dp);
printf("%d\n", dfs(cnt, M));
}
return 0;
}



ZOJ 3791 An Easy Game的更多相关文章

  1. zoj 3791 An Easy Game dp

    An Easy Game Time Limit: 2 Seconds      Memory Limit: 65536 KB One day, Edward and Flandre play a ga ...

  2. ZOJ 3791 An Easy Game(DP)

    题目链接 题意 : 给你两个长度为N的字符串,将第一个字符串每次只能变化M个,问变换K次之后变成第二个字符串一共有几种方法. 思路 : DP.dp[i][j]表示变了 i 次之后有j个不一样的字母的方 ...

  3. ZOJ 3791 An easy game DP+组合数

    给定两个01序列,每次操作可以任意改变其中的m个数字 0变 1  1 变 0,正好要变化k次,问有多少种变法 dp模型为dp[i][j],表示进行到第i次变化,A,B序列有j个不同的 变法总和. 循环 ...

  4. ZOJ 3868 - Earthstone: Easy Version

    3868 - Earthstone: Easy Version Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld ...

  5. 【ZOJ 3844】Easy Task

    题意 每次把序列中最大的数a的一个和最小的数b的一个变成a-b.求最后是否能使序列里的数全部相同,能则输出这个相同的数. 分析 一定是有解的,不断减少最大数的个数,最大数减少为0个时,就是减少了不同数 ...

  6. 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 ...

  7. Easy 2048 Again - ZOJ 3802 像缩进dp

    Easy 2048 Again Time Limit: 2 Seconds      Memory Limit: 65536 KB Dark_sun knows that on a single-tr ...

  8. ZOJ 2969 Easy Task

    E - Easy Task Description Calculating the derivation of a polynomial is an easy task. Given a functi ...

  9. ZOJ 3802 Easy 2048 Again 状态DP

    zoj 上次的月赛题,相当牛的题目啊,根本想不到是状态压缩好吧 有个预先要知道的,即500个16相加那也是不会超过8192,即,合并最多合并到4096,只有2的12次方 所以用状态压缩表示前面有的序列 ...

随机推荐

  1. Android 之 悬浮窗

    昨天研究Android的悬浮窗,遇到一个问题,研究了一天,总算找到结症了,原因非常坑人..... 问题是这样的,我想要将悬浮窗展现在桌面或其他应用之上,我的开发机子用的是MIUI,结果发现在机子上无论 ...

  2. [Python][flask][flask-wtf]关于flask-wtf中API使用实例教程

    简介:简单的集成flask,WTForms,包括跨站请求伪造(CSRF),文件上传和验证码. 一.安装(Install) 此文仍然是Windows操作系统下的教程,但是和linux操作系统下的运行环境 ...

  3. Educational Codeforces Round 8 D. Magic Numbers

    Magic Numbers 题意:给定长度不超过2000的a,b;问有多少个x(a<=x<=b)使得x的偶数位为d,奇数位不为d;且要是m的倍数,结果mod 1e9+7; 直接数位DP;前 ...

  4. MVC-起始页面设置

    MVC的URL是通过路由映射的,因为我们可以通过修改RouteConfig来改变应用的起始页面. public class RouteConfig { public static void Regis ...

  5. 导入NGUI插件

    在Unity编辑器顶部菜单栏中的Assets菜单中选择Import Package,然后选择Custom Package(自定义资源包),弹出资源路径窗口,在其中找到NGUI资源包所在的位置,单击”打 ...

  6. Get your Windows product key from a script

    The product key is located in the registry under HKLM\Software\Microsoft\Windows NT\CurrentVersion I ...

  7. Java编程思想(1)

    0:什么是JavaEE Java技术是个平台,在这个平台上跳舞 1:开发环境的搭建 jdk1.7.* JAVA_HOME  jdk的安装路径 如:C:\Java\jdk1.7.0_72 PATH:%J ...

  8. 备忘·添加SublimeText3右键菜单

    因为用的sublimeText3是免安装版,打开未关联文件,略有麻烦,所以搜了一下,发现几种解决办法,其中INF文件的方法很喜欢,备份下 [Version] Signature="$Wind ...

  9. Python/Numpy大数据编程经验

    Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点.   ...

  10. res\menu\main.xml:6: error: No resource identifier found for attribute 'showAsAction' in package 'com.xxx.xxxx'

    res\menu\main.xml:6: error: No resource identifier found for attribute 'showAsAction' in package 'co ...