给定两个01序列,每次操作可以任意改变其中的m个数字 0变 1  1 变 0,正好要变化k次,问有多少种变法

dp模型为dp[i][j],表示进行到第i次变化,A,B序列有j个不同的 变法总和。

循环k次,每次针对m,向那j个不同 分1-j个即可,不过要用到组合数,因为对每个数操作不同都不一样

最后结果就是 dp[k][0]

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
using namespace std;
LL dp[][];
LL c[][];
int n,m,k,len;
char s1[],s2[];
const LL M=+;
void init()
{
c[][]=;
for (int i=;i<;i++){
c[i][]=;
for (int j=;j<=i;j++){
c[i][j]=c[i-][j-]+c[i-][j];
c[i][j]%=M;
}
}
}
int main()
{
init();
while (scanf("%d%d%d",&n,&k,&m)!=EOF)
{
scanf("%s%s",s1,s2);
int a=;
for (int i=;i<n;i++){
if (s1[i]!=s2[i]){
a++;
}
}
memset(dp,,sizeof dp);
dp[][a]=;
for (int i=;i<k;i++){
for (int j=;j<=n;j++){
if (dp[i][j]){
for (int q=;q<=min(m,j);q++){
int sta=j+m-*q;
dp[i+][sta]+=c[j][q]*c[n-j][m-q]%M*dp[i][j]%M;
if (dp[i+][sta]>=M) dp[i+][sta]%=M;
}
}
}
}
printf("%lld\n",dp[k][]);
}
return ;
}

最新文章

  1. iOS单元格高度计算
  2. BFS与DFS
  3. javascript数组浅谈3
  4. 神奇的main方法详解
  5. JS 事件练习
  6. File和URL的getPath()方法区别
  7. Linux-C程序的存储空间布局
  8. 【Tsinghua OJ】范围查询(Range)问题
  9. 实例讲解如何在Delphi中动态创建dxBarManager内容
  10. Java集合类之HashMap
  11. ADO.NET之使用DataGridView控件显示从服务器上获取的数据
  12. FineUI页面布局
  13. Python之道1-环境搭建与pycharm的配置django安装及MySQL数据库配置
  14. jexus部署webapi或mvc报错处理
  15. Python之路1-变量、数据类型、循环语法
  16. QMessageBox对话框
  17. C语言中getch()、getche()和getchar()
  18. undefined reference问题总结
  19. Cpp读文件、CString转String、String转CString
  20. Spark学习之路 (四)Spark的广播变量和累加器

热门文章

  1. css选择器优先级排序
  2. Python学习笔记之基础篇(四)列表与元祖
  3. Spring mvc mybatis 查询结果缺少字段 解决方法
  4. 博途V13 仿真S7-300PLC 与HMI 的以太网通讯。实现简单功能 HMI 型号是TP900
  5. #define 和 const
  6. swift4之String与NSString的区别与使用
  7. Android 四种加载方式详解(standard singleTop singleTask singleInstance) .
  8. Ajax--XMLHttpRequest的使用
  9. JVM中 Class 文件分析
  10. 前端学习笔记系列一:12 js中获取时间new date()的用法