给两个长n的01串s1和s2,要对s1进行k次修改,每次修改m个不同位置,问有几种方式修改成s2。

想偏了,只想到原始的01数值是不重要的,因为每个位置修改次数的奇偶性是确定的这一层。。

其实,这题只要关心从起点到终点有几个位置是不同的,一个数值足矣。

然后具体的状态就是:dp[i][j]表示,进行i次修改后有j个位置不同的方案数。

转移用我为人人,dp[i][j]通过选择修改a个位置不同、m-a个位置相同转移到dp[i+1][j-(a-(m-a))],即dp[i+1][j-(a-(m-a))]=∑C(j,a)*C(n-j,m-a)*dp[i][j]。

这题的状态的设计和转移对我来说还是挺巧的。。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long d[][],C[][];
int main(){
for(int i=; i<; ++i) C[i][]=;
for(int i=; i<; ++i){
for(int j=; j<=i; ++j) C[i][j]=(C[i-][j-]+C[i-][j])%;
}
char s1[],s2[];
int n,k,m;
while(~scanf("%d%d%d",&n,&k,&m)){
scanf("%s%s",s1,s2);
int cnt=;
for(int i=; i<n; ++i){
if(s1[i]!=s2[i]) ++cnt;
}
memset(d,,sizeof(d));
d[][cnt]=;
for(int i=; i<k; ++i){
for(int j=; j<=n; ++j){
if(d[i][j]==) continue;
for(int k=; k<=j; ++k){
if(j-(k-(m-k))< || n-j< || m-k<) continue;
d[i+][j-(k-(m-k))]+=C[j][k]*C[n-j][m-k]%*d[i][j]%;
d[i+][j-(k-(m-k))]%=;
}
}
}
printf("%lld\n",d[k][]);
}
return ;
}

ZOJ3791 An Easy Game(DP)的更多相关文章

  1. CF1096D Easy Problem(DP)

    貌似最近刷了好多的CF题…… 题目链接:CF原网 洛谷 题目大意:有一个长度为 $n$ 的字符串 $s$,删除第 $i$ 个字符需要代价 $a_i$.问使得 $s$ 不含有子序列(不是子串)" ...

  2. Codeforces 1077F1 Pictures with Kittens (easy version)(DP)

    题目链接:Pictures with Kittens (easy version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:$dp[i][j ...

  3. ZOJ 3791 An Easy Game(DP)

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

  4. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  5. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  6. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  7. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  8. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  9. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

随机推荐

  1. Python 常用函数大体分类

    ==================系统库函数================ 字符串函数 举例数学函数 import math val=math.sin(3.14/6) val=math.sin(m ...

  2. 添加删除虚拟ip

    添加  ip -f inet addr add 192.168.1.245/32 brd 192.168.1.245 dev ens32 删除  ip -f inet addr del 192.168 ...

  3. 淘宝(阿里百川)手机客户端开发日记第九篇 Looper详解

    public final class Looper: 官方的API: Class used to run a message loop for a thread. Threads by default ...

  4. [Effective JavaScript 笔记] 第8条:尽量少用全局对象

    初学者容易使用全局变量的原因 创建全局变量毫不费力,不需要任何形式的声明(只要在非函数里用var 你就可以得到一个全局变量) 写得代码简单,不涉及到大的项目或配合(写hello world是不会有什么 ...

  5. [Effective JavaScript 笔记]第59条:避免过度的强制转换

    js是弱类型语言.许多标准的操作符和代码库会把输入参数强制转换为期望的类型而不是抛出错误.如果未提供额外的逻辑,使用内置操作符的程序会继承这样的强制转换行为. functin square(x){ r ...

  6. [codeforces 293]A. Weird Game

    [codeforces 293]A. Weird Game 试题描述 Yaroslav, Andrey and Roman can play cubes for hours and hours. Bu ...

  7. Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning

    原文 http://blog.csdn.net/abcjennifer/article/details/7758797 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...

  8. C#关键字base

    例子: public CustomStroke(SharpType type) :base() { this.type = type; } 这里的CustomStroke继承与基类Stroke类,用关 ...

  9. Dmaven.multiModuleProjectDirectory system propery is not set.

    eclipse中使用maven插件的时候,运行run as maven build的时候报错-Dmaven.multiModuleProjectDirectory system propery is ...

  10. 绕过 <?PHP exit('Access Denied'); ?> 限制

    绕过 <?PHP exit('Access Denied'); ?> 限制   <?php $shellcode='PD9waHBpbmZvKCk7Pz4';//   base64_ ...